开发者

How to make a Generic Type Cast function [duplicate]

This question already has answers here: Closed 11 years ago.

Possible Duplicate:

is there a generic Parse() function that will convert a string to any type using parse?

I want to make a generic function for doing some operations, like:

ConvertValue<T>(string value)

If T is int then the funct开发者_StackOverflow社区ion will convert the value to int and return the result.

Similarly, if T is boolean, the function will convert the value to boolean and return it.

How to write this?


Something like this?

public static T ConvertValue<T>(string value)
{
    return (T)Convert.ChangeType(value, typeof(T));
}

You can then use it like this:

int val = ConvertValue<int>("42");

Edit:

You can even do this more generic and not rely on a string parameter provided the type U implements IConvertible - this means you have to specify two type parameters though:

public static T ConvertValue<T,U>(U value) where U : IConvertible
{
    return (T)Convert.ChangeType(value, typeof(T));
}

I considered catching the InvalidCastException exception that might be raised by Convert.ChangeType() - but what would you return in this case? default(T)? It seems more appropriate having the caller deal with the exception.


While probably not as clean looking as the IConvertible approach, you could always use the straightforward checking typeof(T) to return a T:

public static T ReturnType<T>(string stringValue)
{
    if (typeof(T) == typeof(int))
        return (T)(object)1;
    else if (typeof(T) == typeof(FooBar))
        return (T)(object)new FooBar(stringValue);
    else
        return default(T);
}

public class FooBar
{
    public FooBar(string something)
    {}
}


ConvertValue( System.Object o ), then you can branch out by o.GetType() result and up-cast o to the types to work with the value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜