在javascript中,我可以做到
var value = obj.A || 3;
这意味着,如果obj.A
为null或未定义或为空,则改用3。
如何在C#中做到这一点?还是这是C#中最好的方法?
int value = obj.A == null ? 3 : obj.A;
答案 0 :(得分:4)
您可以使用空传播?.
和空合并运算符??
来执行此操作。
var value = obj?.A ?? 3;
第一个提示“如果obj为null,则忽略A并仅使用null”。第二个是“如果左侧为空,请使用右侧”
答案 1 :(得分:0)
...如果obj.A为null或未定义或为空,则改用3。
c#没有undefined
的概念。您对此无能为力,如果想要一个等效的容器,则必须创建某种通用类型包装器,但我建议不要这样做。
在c#中也没有像JavaScript中那样的本机truthy
检查(这是您在写“空”时实际上指的是什么)。您将必须构建自己的方法或扩展方法,或者在要进行比较的情况下针对默认值添加其他检查。
class Temp
{
public int? A {get;set;}
}
public static void Main()
{
Temp obj = new Temp();
int resultingValue1 = (obj.A == null || obj.A == default(int)) ? 3 : (int) obj.A;
// or
int resultingValue2 = obj.A.IsNullEmpty() ? 3 : (int) obj.A;
}
public static class Extensions
{
public static bool IsNullEmpty<T>(this T valueToCheck)
{
return valueToCheck == null || EqualityComparer<T>.Default.Equals(valueToCheck, default(T));
}
}
另请参阅马克·格雷夫(Marc Gravell)的答案Null or default comparison of generic argument in C#