通用类型转换

时间:2014-03-28 18:22:05

标签: c# .net casting

我正在尝试将对象转换为泛型类型。这是一个示例方法:

void Main()
{
    object something = 4;
    Console.WriteLine(SomeMethod<int>(something));
    Console.WriteLine(SomeMethod<string>(something));
}

public T SomeMethod<T>(object someRandomThing)
{

    T result = Convert.ChangeType(someRandomThing, typeof(T));

    return result;
}

这会出现此错误:

  

无法隐式转换类型&#39;对象&#39;到了&#39;。存在显式转换(您是否错过了演员?)

我尝试了几种变体来将我的结果转换为通用类型,但每次都没有。

有没有办法进行演员表?

注意:在我的真实例子中,我得到一个&#34;对象&#34;从存储过程返回。该方法可以调用多个存储过程中的一个,因此结果可以是字符串或int(或long),具体取决于调用哪个sproc。

2 个答案:

答案 0 :(得分:11)

Convert.ChangeType返回对象,因此您需要将结果转换回T

T result = (T)Convert.ChangeType(someRandomThing, typeof(T))

答案 1 :(得分:3)

试试这个:

return (T)Convert.ChangeType(someRandomThing, typeof(T));