除了向后兼容性之外,是否有任何令人信服的理由:
(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 字符串引用。