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
我今天遇到了一个奇怪的场景,我只是想知道是否有人可以解释为什么我会看到下面的内容。
我希望以下所有语句的计算结果为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)
预先感谢您对这个问题的任何见解。
试图弄清楚如何让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以及尽管输入
我满足于称它已关闭.
我阅读了关于运算符重载的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#中重载此运算符.以上示例是需要使用时的简单情况??.
我有一个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#还有点新鲜......我发现自己一遍又一遍地重复使用特定的程序.在我为个人懒惰写一个辅助方法之前,是否有更短或更少的错误方式来编写这种陈述?
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)
再次,我完全有能力编写自己的帮助函数.在我这样做之前,我正在寻找现有的本机功能或简写.
为什么var APP = APP || {};工作正常,但const APP = APP || {};不是?或者let APP = APP || {}就此而言.
Uncaught ReferenceError: APP is not defined
Run Code Online (Sandbox Code Playgroud)
因为这只与APP的评估有关,而不是与它的设定有关.
我正在使用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) 我有这个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运算符执行某些操作.
有什么建议?
我正在做一件事情,我挑选一个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
但我希望找到一些更紧凑的表达方式.有吗?
c# ×7
null ×2
.net ×1
ecmascript-6 ×1
execution ×1
foreach ×1
javascript ×1
let ×1
nested ×1
operators ×1
php ×1
php-7 ×1
powershell ×1
trygetvalue ×1
var ×1