当前位置:  开发笔记 > 编程语言 > 正文

Nullable <T>:和重载运算符,bool?&bool

如何解决《Nullable<T>:和重载运算符,bool?&bool》经验,为你挑选了1个好方法。

运营商Nullable是"解除"运营商.这意味着:如果T有运算符,T?将拥有"解除"对手.

&&和|| 并不是真正与&和|相同的运算符 - 例如,它们不能超载 - 来自ECMA规范14.2.2运算符重载:

可重载的二元运算符是:+ - */%&| ^ << >> ==!=> <> = <=只有上面列出的运算符可以重载.特别是,不能重载成员访问,方法调用或=,&&,||,??,?:,checked,unchecked,new,typeof,as和is运算符.

同样,根据ECMA规范,14.2.7提升运营商,提升的运营商是:

对于一元运算符+ ++ - - !〜

对于二元运算符+ - */%&| ^ << >>

对于相等运算符==!=

对于关系运算符<> <=> =

基本上,短路运营商并未被定义为提升运营商.

[编辑:添加婴儿床单]

提升运算符:编译器提供的运算符Nullable,基于T的运算符 - 例如:int"+"运算符被"提升"到int?,定义为:

(int?x,int?y)=>(x.HasValue && y.HasValue)?(x.Value + y.Value):( int?)null;

运算符重载:为给定类型提供自定义运算符实现的行为; 例如,decimalDateTime提供各种操作员重载

短路:&&||(在许多语言中,包括C++和C#)的正常行为- 即可能不会评估第二个操作数- 即

(expression1,expression2)=> expression1()?expression2():false;

或者也许是一个更简单的例子:

bool someFlag = Method1() && Method2();

如果Method1()返回false,Method2()则不执行(因为编译器已经知道整体答案是假的).如果Method2()有副作用,这很重要,因为保存到数据库...



1> Marc Gravell..:

运营商Nullable是"解除"运营商.这意味着:如果T有运算符,T?将拥有"解除"对手.

&&和|| 并不是真正与&和|相同的运算符 - 例如,它们不能超载 - 来自ECMA规范14.2.2运算符重载:

可重载的二元运算符是:+ - */%&| ^ << >> ==!=> <> = <=只有上面列出的运算符可以重载.特别是,不能重载成员访问,方法调用或=,&&,||,??,?:,checked,unchecked,new,typeof,as和is运算符.

同样,根据ECMA规范,14.2.7提升运营商,提升的运营商是:

对于一元运算符+ ++ - - !〜

对于二元运算符+ - */%&| ^ << >>

对于相等运算符==!=

对于关系运算符<> <=> =

基本上,短路运营商并未被定义为提升运营商.

[编辑:添加婴儿床单]

提升运算符:编译器提供的运算符Nullable,基于T的运算符 - 例如:int"+"运算符被"提升"到int?,定义为:

(int?x,int?y)=>(x.HasValue && y.HasValue)?(x.Value + y.Value):( int?)null;

运算符重载:为给定类型提供自定义运算符实现的行为; 例如,decimalDateTime提供各种操作员重载

短路:&&||(在许多语言中,包括C++和C#)的正常行为- 即可能不会评估第二个操作数- 即

(expression1,expression2)=> expression1()?expression2():false;

或者也许是一个更简单的例子:

bool someFlag = Method1() && Method2();

如果Method1()返回false,Method2()则不执行(因为编译器已经知道整体答案是假的).如果Method2()有副作用,这很重要,因为保存到数据库...

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有