决定让“null 作为字符串”返回 null 背后的理由是什么?
本文关键字:null 背后 理由 返回 是什么 字符串 决定 | 更新日期: 2023-09-27 18:30:44
除了向后兼容性之外,还有什么令人信服的理由
:(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/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 string
是false
,根据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 字符串引用。