决定让“null 作为字符串”返回 null 背后的理由是什么?

本文关键字:null 背后 理由 返回 是什么 字符串 决定 | 更新日期: 2023-09-27 18:30:44

除了向后兼容性之外,还有什么令人信服的理由

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

决定让“null 作为字符串”返回 null 背后的理由是什么?

expr as T的意思

  • 如果expr指向 T 的实例,则(T)expr
  • (T)null ,否则

T必须是可为空的类型)

无论你选择哪个分支,null as T都会产生(T)null,对于任何T

你的问题含糊不清,基本上无法回答,所以我不打算尝试回答它。如果您真正想要的是一篇关于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/

有什么令人信服的理由吗

是的,没有一个System.String实例null转换为非 null 实例是有意义的。可以这样想:显然null is string应该评估为 false,因为null不是指string的实例。由于null is stringfalse,根据null as string的定义,null as string应该是null

超越向后兼容性

向后兼容什么?

让我把问题转向你?您认为null as string应该计算string的哪个非空实例?

这只是因为空字符串引用等于空。 如果你把它分解出来并显示"临时"变量,理解起来要简单得多:

 string temporary = null as string;
 bool result = temporary == null; // Obviously true still

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