ghd*_*ghd 8 c# nullable operators
我&&在两个可以为空的boolean ()之间应用AND operation(),bool?但它给了我错误
运算符
&&不能应用于类型bool?和的操作数bool?
我如何在包含两个可空的bool的声明中应用和操作?
如果我有一个对话框结果,如果
dialog.ShowDialog () == DialogResult.OK
Run Code Online (Sandbox Code Playgroud)
我如何将其转换为可空的bool,因为我需要在其他操作数返回可以为空的bool的if条件中放入'&&'运算符?这是代码:
if (dialog.ShowDialog () == DialogResult.OK && CheckProjectPath(dialog.FileName, true))
Run Code Online (Sandbox Code Playgroud)
这个if条件中的第二个操作数是可以为空的bool.
Eri*_*ert 18
我如何在包含两个可空的bool的声明中应用和操作?
那么,你想要发生什么?这是非法的原因是因为如果第一个操作数为null,则会发生错误.
可以x && y为空的布尔数x和y意味着什么?那么,可空的布尔值首先意味着什么呢?可以为空的布尔值表示以下三种情况之一:
那x && y意味着什么?这意味着"只有当条件x为真时才评估y",但如果x可以为空,那么我们可能不知道x表示的条件是否为真.
例如,假设我们有:
gotMoneyInZurich = SalesForNovemberWereMoreThanAMillionBucks() &&
TryToDepositAMillionBucksInASwissBankAccount();
Run Code Online (Sandbox Code Playgroud)
如果SalesForNovemberWereMoreThanAMillionBucks是假的,那么不要试图存钱,我们知道银行里没有钱.如果是真的,那就试着存钱; 如果失败了,那么我们在苏黎世没有钱; 如果成功,我们会这样做.
现在假设并非所有的销售人员都报告了11月的销售数据.我们知道11月份的销售额是否超过一百万美元?十一号是过去的; 无论是销售额还是不超过一百万美元,但现在我们还不知道.正确答案不是"假",正确答案不是"真实":正确答案是"我们不知道":null.
那么,如果第一个操作数返回null,该怎么办呢?我们不知道销售额是否超过一百万美元,因此尝试存入资金或不试图存入资金是正确的做法吗?您是否应该根据缺失的信息采取行动?
编译器无法为您决定此问题.如果你想不存钱,如果结果不明,那么你必须说:(SalesForNovemberWereMoreThanAMillionBucks() ?? false)意思是"如果结果是空的,就把它视为假的".
同样,如果你说:
if(x && y)
Frob();
Run Code Online (Sandbox Code Playgroud)
并且x是真的,并且y是null,那么你应该怎么做?你只是说"Frob只有当x和y都是真的时.x是真的,我们不知道y是否为真".所以你应该Frob与否? 你不知道.编译器也不知道.如果你想说的是"Frob如果x是真的并且y是真或空"那么说:
if(x && (y ?? true))
Frob();
Run Code Online (Sandbox Code Playgroud)
或者,"如果x为真且y为真,则为frob,但如果y为空则不为",则说:
if(x && (y ?? false))
Frob();
Run Code Online (Sandbox Code Playgroud)
现在,如果您没有使用&&运算符来进行短路评估,那么首先不要使用&&运算符.使用&运算符; 它总是评估双方,所以这里没有歧义.如果x和y是可空的bool,那么说"x&y"是完全合法的.如果x或y为null,则结果为null;如果x和y均为true,则结果为true,否则返回false.当然,你仍然不能在"if"中使用那个东西; 这需要一个布尔,而不是一个可以自欺欺人的布尔.但你可以说:
bool? result = x & y;
Run Code Online (Sandbox Code Playgroud)
其中x和y是可以为空的bools.
你可以使用类似的东西
bool? b1 = ...;
bool? b2 = ...;
bool b = (b1 ?? true) && (b2 ?? false);
Run Code Online (Sandbox Code Playgroud)
你必须选择自己的默认值.
我如何将其转换为可空的bool,因为我需要在其他操作数返回可以为空的bool的if条件中放入'&&'运算符?
你应该走另一条路:你不能对可以为空的操作数进行操作,所以你必须尝试转换bool?为bool.运营商 ??在这里非常有用:
if (dialog.ShowDialog () == DialogResult.OK
&& CheckProjectPath(dialog.FileName, true) ?? false)
Run Code Online (Sandbox Code Playgroud)
关于"零合并算子" ?? :
int? a, b, c;
...
int d = a ?? b ?? c ?? -1;
Run Code Online (Sandbox Code Playgroud)
如果a,b和c都是nulld则变为-1.如果其中任何一个不为null,则使用第一个值.
| 归档时间: |
|
| 查看次数: |
10808 次 |
| 最近记录: |