C#泛型和铸造
我在代码库中遇到一个函数抛出错误:C#泛型和铸造,c#,generics,casting,C#,Generics,Casting,我在代码库中遇到一个函数抛出错误: public static T InternalData<T>() { return (T)"100"; } 尝试: publicstatict内部数据(对象数据) { return(T)Convert.ChangeType(数据,typeof(T)); } 这适用于实现IConvertible接口的类型(Int32和String有此功能)。一种可能是使用 return (T)Convert.ChangeType(yourValue,
public static T InternalData<T>()
{
return (T)"100";
}
尝试:
publicstatict内部数据(对象数据)
{
return(T)Convert.ChangeType(数据,typeof(T));
}
这适用于实现
IConvertible
接口的类型(Int32和String
有此功能)。一种可能是使用
return (T)Convert.ChangeType(yourValue, typeof(T));
请注意,如果
yourValue
不是实现IConvertible
的类型的实例,这将引发异常。如果值本身无法转换,它也会抛出异常,例如,如果您使用“abc”而不是“100”。使用Convert.ChangeType
public static T InternalData<T>()
{
return (T)Convert.ChangeType("100", typeof (T));
}
publicstatict InternalData()
{
return(T)Convert.ChangeType(“100”,typeof(T));
}
如果无法转换值,它仍然会抛出错误,但不会尝试进行直接强制转换。它可以将字符串转换为整数ok。不要混淆强制转换和转换!如果编译器不知道表达式的真实类型,例如,因为它的类型为
对象
,并且您知道它的固有类型,那么您可以告诉C编译器,“嘿,我知道它是int
,所以请将其视为int
”
在您的例子中,表达式是一个字符串表达式,不能强制转换为
int
,因为它不是int
。但是,如果字符串表示有效整数,则可以将其转换为int
。此外,转换的结果类型未知,因为它是泛型的。使用(T)Convert.ChangeType(…)
,正如其他人所建议的那样。我以前从未使用过ChangeType,不知道该方法存在-谢谢-现在就开始测试!太好了:)很高兴我能帮忙:)
return (T)Convert.ChangeType(yourValue, typeof(T));
public static T InternalData<T>()
{
return (T)Convert.ChangeType("100", typeof (T));
}
(int)expression