And*_*lon 6 .net c# generics casting
我在使用泛型时遇到了一个奇怪的转换问题.下面的代码将抛出一个InvalidCastException尽管明显int可以强制转换为a double.谁能解释这种行为以及如何绕过它?
public class TestClass<T>
{
public T Cast(object o)
{
return (T)o;
}
}
public void Main()
{
TestClass<double> w = new TestClass<double>();
double x = w.Cast(10);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
因为我在.net 4.0土地上无论如何我改变它使用'动态'而不是'对象',一切都按预期工作.欣赏所有现场和快速回复.
但是一个人object不能投double.该o参数需要一个object,而不是一个int.
例如,以下代码失败,其中包含InvalidCastException:
object o = 1000;
double x = (double)o;
Run Code Online (Sandbox Code Playgroud)
您可以使用TypeConverter转换变量
public class TestClass<T>
{
public T Cast(object o)
{
TypeConverter converter = TypeDescriptor.GetConverter(o);
if (converter.CanConvertTo(typeof(T)))
{
var result = converter.ConvertTo(o, typeof(T));
return (T)result;
}
throw new InvalidCastException(
string.Format("Cannot convert from {0} to {1}", o.GetType().Name, typeof(T).Name));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |