Hek*_*eki 7 c# generics casting
关于Casting泛型类型"as T",同时强制执行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;
}
Run Code Online (Sandbox Code Playgroud)
和
private static T deserialize<T>(string streng)
{
XmlSerializer ser = new XmlSerializer(typeof(T));
StringReader reader = new StringReader(streng);
return (T)ser.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)
我习惯于进行object as Type演员表演,所以当我发现我不能那样做时,我有点困惑T.然后我找到了上面的问题,并找到了as T编译器错误的解决方案.
但是为什么where T : class在使用object as T时需要而不是在使用时(T)object?两种铸造物体的方式之间的实际差异是什么?
Mar*_*ell 18
因为as暗示强制转换可能会失败并返回null.没有: class,T可能是int等 - 这是不可能的null.有了(T)obj它只会在爆炸火花的淋浴; 无需处理null.
作为旁边(重新struct),注意你可以使用,as如果它已知你正在铸造Nullable<>- 例如:
static T? Cast<T>(object obj) where T : struct
{
return obj as T?;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10377 次 |
| 最近记录: |