标签: null-coalescing-operator

有没有更短的方法可以用 C# 8 编写此代码?

if (value2 != null)
{
    value1 = value2;
}
                
Run Code Online (Sandbox Code Playgroud)

??运算符在这里似乎没有用。我想到使用三元运算符。

value1 = (value2 != null) ? value2 : value1;
Run Code Online (Sandbox Code Playgroud)

看起来不太好。有更短的路吗?

.net c# null null-coalescing-operator null-conditional-operator

2
推荐指数
1
解决办法
137
查看次数

C#:使用可空布尔值的空合并运算符给出(我认为)不正确的结果

我今天遇到了一个奇怪的场景,我只是想知道是否有人可以解释为什么我会看到下面的内容。

我希望以下所有语句的计算结果为True,但是当可空 bool 设置为时,False其计算结果为False

我读过其他帖子,指出您应该优先考虑使用空排序规则的运算符。这当然有效,但这并不能解释为什么第二个表达式的计算结果为False,这是我想回答的问题。

我什至创建了一个Sharplab.io。据我所知,True前两个表达式的部分刚刚被删除。这对我来说没有任何意义,看起来像是一个错误。您当然可以使用括号来解决它,但这种行为对我来说似乎很奇怪。

bool? nullableBoolEqualNull = null;
bool? nullableBoolEqualFalse = false;

Console.WriteLine(nullableBoolEqualNull ?? false || true); // Evaluates to `True`
Console.WriteLine(nullableBoolEqualFalse ?? false || true); // Evaluates to `False`
Console.WriteLine((nullableBoolEqualNull ?? false) || true); // Evaluates to `True`
Console.WriteLine((nullableBoolEqualFalse ?? false) || true); // Evaluates to `True`
Run Code Online (Sandbox Code Playgroud)

预先感谢您对这个问题的任何见解。

c# null-coalescing-operator

2
推荐指数
1
解决办法
406
查看次数

在foreach语句中使用null合并

试图弄清楚如何让null合并运算符在foreach循环中工作.

我正在检查字符串的结尾并基于此,将其路由到某个方法.基本上我想说的是....

foreach (String s in strList)
{
    if s.EndsWith("d") ?? Method1(s) ?? Method2(s) ?? "Unknown file type";
}
Run Code Online (Sandbox Code Playgroud)

在尝试这样做时,当然你得到"运算符??不能用于类型bool和类型字符串." 我知道还有其他方法可以做到这一点,只是想看看如何使用null合并来完成它.

周末愉快.

@Richard Ev:哦,当然是的.切换,如果不是,等等只是好奇如何处理它

@Jon Skeet:看完你的评论后,它打了我,这真是太糟糕了!我基本上对两个文件扩展感兴趣.例如,如果文件以"abc"结尾,则发送到方法1,如果文件以"xyz"结尾发送到方法2.但是如果文件以"hij"的扩展名结束,那么该怎么办...繁荣,你是完成.

感谢Brian和GenericTypeTea以及尽管输入

我满足于称它已关闭.

c# foreach null null-coalescing-operator

1
推荐指数
1
解决办法
716
查看次数

可以在C#中重载`??`运算符?

我阅读了关于运算符重载的MSDN文档.

在该示例中,所使用的经营者+,-并且还可以定义其他*/.

我想重载??运算符用于字符串之类的

string emptyString = emptyString ?? "OtherValue";
Run Code Online (Sandbox Code Playgroud)

代替

string emptyString = string.IsNullOrEmpty(emptyString) ? "OtherValue" : emptyString;
Run Code Online (Sandbox Code Playgroud)

希望将字符串转换为对象并使用比较??.

我知道它??用于可空值的类型,MSDN说:

?? ?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值.

如果操作数不为null,则返回左侧操作数; 否则返回正确的操作数.

我想问你是否有可能在C#中重载此运算符.以上示例是需要使用时的简单情况??.

c# operators null-coalescing-operator

1
推荐指数
2
解决办法
362
查看次数

如何优化这些空值检查操作?

我有一个SQL Reader对象,我通过它迭代,并且通常情况下,你永远不会知道你会得到什么.无论读者返回什么值,都需要将其转换为double,但如果它返回null,我需要使用默认值优雅地处理它,在本例中为0.我开始使用与此类似的代码......

double x;
if (reader[1] is double)
    x = (double)reader[1];
else
    x = 0;
Run Code Online (Sandbox Code Playgroud)

......这似乎可以解决问题,但我并不满意.我认为设计C#的神秘团队会有这样的操作员,你知道的是,.那么,我最后得到的实现略有不同......

var x = reader[1] as Double? ?? 0;
Run Code Online (Sandbox Code Playgroud)

我不能告诉你上面的两个例子是否相同,因为像所有的newbs一样,我采用的代码我认为可以解决问题,并将它用于重要的事情 - 部分笑话.我所知道的是,我还没有为任何一个实现在命中数据库时获得异常并获得null结果,这让我相信两者都按照我的预期工作,但我宁愿确定.

那么,关于我的问题.有人可以解释一下我使用这两种功能可能会遇到的功能差异吗?如果可能,有人可以提供/解释第二个例子的更好实现吗?我发现null-coalesce运算符非常性感,但我真的不知道我是否以最佳方式实现它.谢谢.

c# null-coalescing-operator

1
推荐指数
1
解决办法
159
查看次数

更少错误TryGetValue然后null检查语法

我对C#还有点新鲜......我发现自己一遍又一遍地重复使用特定的程序.在我为个人懒惰写一个辅助方法之前,是否有更短或更少的错误方式来编写这种陈述?

Dictionary<string, string> data = someBigDictionary;
string createdBy;
data.TryGetValue("CreatedBy", out createdBy);
//do that for 15 other values
...
MyEntity me = new MyEntity{
    CreatedBy = createdBy ?? "Unknown",
    //set 15 other values
    ...
}
Run Code Online (Sandbox Code Playgroud)

本质上,通过尝试获取值来设置对象的属性,然后如果它为null则使用默认值.我有很多属性,如果我可以的话会更好

MyEntity me = new MyEntity{
    CreatedBy = TryToGetValueOrReturnNull(data, "CreatedBy") ?? "Unknown",
    ...
}
Run Code Online (Sandbox Code Playgroud)

再次,我完全有能力编写自己的帮助函数.在我这样做之前,我正在寻找现有的本机功能或简写.

c# null-coalescing-operator trygetvalue

1
推荐指数
1
解决办法
917
查看次数

为什么JavaScript的null合并运算符(||)不能用于es6变量(let/const)?

为什么var APP = APP || {};工作正常,但const APP = APP || {};不是?或者let APP = APP || {}就此而言.

Uncaught ReferenceError: APP is not defined
Run Code Online (Sandbox Code Playgroud)

因为这只与APP的评估有关,而不是与它的设定有关.

javascript var let null-coalescing-operator ecmascript-6

1
推荐指数
1
解决办法
2967
查看次数

嵌套null合并运算符(??)在PHP中如何工作?需要执行流程的逐步说明

我正在使用PHP 7.2.0

我已经了解了空合并运算符(??)的正常基本用法,但是我无法理解嵌套空合并运算符(??)时的执行流程和功能。

请考虑下面的代码示例,并逐步向我解释执行流程。

<?php

$foo = null;
$bar = null;
$baz = 1;
$qux = 2;

echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1

?>
Run Code Online (Sandbox Code Playgroud)

php nested execution null-coalescing-operator php-7

1
推荐指数
1
解决办法
356
查看次数

三元内部的空融合算子

我有这个C#代码:

data[j].Actual[0] = data[j].Actual.Count != 0 ? (data[j].Actual[0] ?? 0) : 0;
Run Code Online (Sandbox Code Playgroud)

我想要做的是检查计数是否为0,在这种情况下,变量的值应设置为0.

如果计数不同于0,我想检查null-coalescing运算符,如果该值存在,否则返回0.

我遇到的问题是我收到此错误消息:

指数超出范围.必须是非负数且小于集合的大小.参数名称:index

我的猜测是,即使data[j].Actual.Count为0时,结果也不是0,但它会尝试使用null-coalescing运算符执行某些操作.

有什么建议?

c# ternary-operator null-coalescing-operator

1
推荐指数
1
解决办法
105
查看次数

PowerShell语法类似于:?运营商?

我正在做一件事情,我挑选一个XML文档,并将一些元素的文本内容写入文件.加载XML文档后,基本方法很简单:我所做的就是这样

$DI_XMLResponse.result.gudid.device.versionModelNumber | Out-File -FilePath $OutputFile -Append -NoClobber -Encoding ascii

但是我需要安排在叶元素没有内容或根本不存在的情况下发出空行.

我可以将内容分配给变量,测试变量是否为null,如果是,则将其作为空字符串,然后将其写入文件,

$foo = $DI_XMLResponse.result.gudid.device.versionModelNumber if (!$foo) $foo = '' $foo | Out-File -FilePath $OutputFile -Append -NoClobber -Encoding ascii

但我希望找到一些更紧凑的表达方式.有吗?

powershell ternary-operator null-coalescing-operator

1
推荐指数
1
解决办法
889
查看次数