【发布时间】:2010-12-21 08:39:13
【问题描述】:
关于Casting generic type "as T" whilst enforcing the type of T
还有下面的例子
private static T deserialize<T>(string streng) where T : class
{
XmlSerializer ser = new XmlSerializer(typeof(T));
StringReader reader = new StringReader(streng);
return ser.Deserialize(reader) as T;
}
和
private static T deserialize<T>(string streng)
{
XmlSerializer ser = new XmlSerializer(typeof(T));
StringReader reader = new StringReader(streng);
return (T)ser.Deserialize(reader);
}
我习惯于使用object as Type 进行强制转换,所以当我发现不能只使用T 时,我有点困惑。然后我找到了上面的问题,并找到了as T编译器错误的解决方案。
但是为什么在使用object as T 时需要where T : class 而在使用(T)object 时不需要呢?
两种投射对象的方式的实际区别是什么?
【问题讨论】:
-
哦,是的,谢谢 abatishchev。没有命名空间会更整洁:)