决定使"null as string"返回null的理由是什么?

blu*_*lds 1 c#

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

(null as string) == null; //true
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 18

expr as T 手段

  • 如果expr指向一个实例T,那么(T)expr
  • (T)null, 除此以外

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

无论你采取哪个分支,null as T收益率(T)null,任何T.

  • @blueberryfields:大多数语言只是简写.`foreach`?速记.`+ =`?速记.`??`运算符.构造函数转发.Lambda表达式.`使用'块.泛型.速记是高级语言和低级语言之间的区别,也是图灵完成的. (10认同)
  • @blueberryfields:Ben是对的.整个语言都是矮人!运营商是方法的缩写.方法是委托类型字段的缩写.类是具有虚函数表的结构的简写."throw"是非本地延续的简写.语言设计的艺术是*选择正确的缩写来嵌入语言*. (7认同)
  • @blueberryfields:因为Java代码中充斥着`(expr instanceof T)?(T)expr:(T)null`,C#团队显然认为有一个专门负责该操作的操作员会很好.优化在实践中经常出现的代码是很好的. (3认同)

Eri*_*ert 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/


jas*_*son 11

有没有令人信服的理由

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

超越向后兼容性

向后兼容什么?

让我转过来问你?string您认为null as string应该评估哪些非null实例?