除了向后兼容性之外,是否有任何令人信服的理由:
(null as string) == null; //true
expr as T方法
expr指向 的实例T,则(T)expr(T)null, 除此以外(并且T必须是可为空的类型)
无论您采用哪个分支null as T,(T)null对于任何T.
您的问题含糊不清,基本上无法回答,因此我不会尝试回答。如果您真正想要的是一篇关于运营商设计考虑的文章as,请参阅:
http://blogs.msdn.com/b/ericlippert/archive/2010/09/16/is-is-as-or-is-as-is.aspx
如果您对转换分析在 C# 类型系统中的作用这一更一般的主题感兴趣,请参阅:
http://blogs.msdn.com/b/ericlippert/archive/tags/conversions/
有什么令人信服的理由吗
是的,没有一个实例System.String可以将其转换null为非空实例。可以这样想:显然null is string应该评估为 false 因为null不引用string. 既然null is string是false,根据 的定义null as string,null as string应该是null。
超越向后兼容性
向后兼容什么?
让我把问题转给你?string您认为null as string应该评估什么非空实例?
这只是因为空字符串引用等于空。如果您将其分解并显示“临时”变量,则更容易理解:
string temporary = null as string;
bool result = temporary == null; // Obviously true still
表达式null as string计算结果为 null 的原因与(string)null计算结果为 null 的原因相同:当您将 null 转换为字符串引用时,您将获得一个 null 字符串引用。