1

除了向后兼容性之外,是否有任何令人信服的理由:

(null as string) == null; //true
4

5 回答 5

18

expr as T方法

  • 如果expr指向 的实例T,则(T)expr
  • (T)null, 除此以外

(并且T必须是可为空的类型)

无论您采用哪个分支null as T(T)null对于任何T.

于 2012-04-09T21:03:01.467 回答
12

您的问题含糊不清,基本上无法回答,因此我不会尝试回答。如果您真正想要的是一篇关于运营商设计考虑的文章as,请参阅:

http://blogs.msdn.com/b/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators.aspx

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/

于 2012-04-09T22:23:51.213 回答
11

有什么令人信服的理由吗

是的,没有一个实例System.String可以将其转换null为非空实例。可以这样想:显然null is string应该评估为 false 因为null不引用string. 既然null is stringfalse,根据 的定义null as stringnull as string应该是null

超越向后兼容性

向后兼容什么?

让我把问题转给你?string您认为null as string应该评估什么非空实例?

于 2012-04-09T21:05:29.657 回答
3

这只是因为空字符串引用等于空。如果您将其分解并显示“临时”变量,则更容易理解:

 string temporary = null as string;
 bool result = temporary == null; // Obviously true still
于 2012-04-09T21:01:08.973 回答
3

表达式null as string计算结果为 null 的原因与(string)null计算结果为 null 的原因相同:当您将 null 转换为字符串引用时,您将获得一个 null 字符串引用。

于 2012-04-09T21:07:25.583 回答