相关疑难解决方法(0)

"as"运算符的意外行为,它与plain cast不同

我问了这个问题.由于这里解释的原因(即使我期望在运行时而不是编译时错误),此代码无法编译("无法转换Generic<T>T").InvalidCastException

class NonGeneric
{
}

class Generic<T> : NonGeneric
    where T : NonGeneric
{
    T DoSomething()
    {
        return (T)this; // ** Cannot convert...
    }
}
Run Code Online (Sandbox Code Playgroud)

接受的解决方案给出了这个解决方法:

T DoSomething()
{
    return this as T;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么as运算符应该完全等同于强制运算符:

as运算符就像一个强制转换操作.但是,如果无法进行转换,则返回null而不是引发异常.

如果this as T应该等于this is T? (T)this: (T)null那么为什么as T工作,(T)this甚至不编译?AFAIK演员阵容可用于更广泛的情况as:

请注意,as运算符仅执行引用转换,可空转换和装箱转换.as运算符不能执行其他转换,例如用户定义的转换,而应使用转换表达式执行转换.

那为什么呢?它是as操作员的记录功能吗?它是泛型类型的编译器/语言限制吗?请注意,此代码编译正常:

return (T)((object)this);
Run Code Online (Sandbox Code Playgroud)

这是因为编译器不能确定是否T是 …

.net c# casting

9
推荐指数
2
解决办法
266
查看次数

如何从List <object>返回特定类型的对象

我有一个 List<object>各种类型的对象的集合.

我正在编写一个辅助方法,它将返回一个特定类型的对象.辅助方法将接受类型名称作为字符串参数.

注意:我使用的是3.5框架.

.net c# .net-3.5

0
推荐指数
1
解决办法
343
查看次数

标签 统计

.net ×2

c# ×2

.net-3.5 ×1

casting ×1