如何处理空变量的默认值?

时间:2018-09-27 14:32:48

标签: javascript c#

在javascript中,我可以做到

var value = obj.A || 3;

这意味着,如果obj.A为null或未定义或为空,则改用3。

如何在C#中做到这一点?还是这是C#中最好的方法?

int value = obj.A == null ? 3 : obj.A; 

2 个答案:

答案 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#

Fiddle

相关问题