用于 ??如果对象不为空,则获取对象的属性
use of ?? to get attributes of an object if the object isn't null
是否可以使用 C# '??'运算符是这样的:
var _var = pr.Value ?? "NA";
检查 pr 是否为 null 而不是 pr 的 Value 属性是否为 null ?
我找不到任何显示类似内容的示例。
如果是,在这种情况下是推荐还是使用扩展方法更好?
To check if pr is null and not if Value attribute of pr is null ?
您似乎只想检查 pr
是否为空。在这种情况下,三元运算符是您的选择:
var _var = pr == null ? "NA" : pr.Value;
或使用简单的 if
/else
.
这里有 3 种不同的场景,所以让我们来看看每种场景的语法:
Return "NA"
如果 pr
或 pr.Value
为空:
var _var = pr?.Value ?? "NA";
?.
运算符基本上会说 "if pr
is null, return null for the whole expression and do not dereference pr.Value
"
因此,如果 pr
为空,?.
运算符将使表达式计算为空,或者如果 pr.Value
为空,它也将计算为空,并且在这两种情况下情况下,?? "NA"
会将整个事情评估为 "NA"
。
这在结果方面等同于:
string _var;
if (pr is null || pr.Value is null)
_var = "NA";
else
_var = pr.Value;
Return "NA"
如果 pr.Value
为空:
var _var = pr.Value ?? "NA";
这就是你所拥有的。如果 pr
为空,这将抛出一个 NullReferenceException
,但如果 pr
为非空但 pr.Value
为空,则计算为 "NA"
。
这在结果方面等同于:
string _var;
if (pr.Value is null) // can throw NullReferenceException
_var = "NA";
else
_var = pr.Value;
Return "NA"
如果 pr
为空并且...如果 pr.Value
为空怎么办?
??
和 ?.
都不能帮助你,但你可以使用三元运算符:
var _var = (pr is null)
? "NA"
: pr.Value;
如果 pr
为空,这将计算为 "NA"
,如果 pr
为非空,则计算为 pr.Value
,因此如果 pr
为非空,但 pr.Value
为空。
注意,??
运算符也是延迟计算的,就像三元运算符一样,所以如果你有这个:
var _v = pr?.Value ?? ComputeTheValue();
并且该方法调用很昂贵,只有在 pr?.Value
实际上为空时才会对其进行评估,如果 pr
为非空且 pr.Value
为非空,则调用不会制作。
是否可以使用 C# '??'运算符是这样的:
var _var = pr.Value ?? "NA";
检查 pr 是否为 null 而不是 pr 的 Value 属性是否为 null ?
我找不到任何显示类似内容的示例。
如果是,在这种情况下是推荐还是使用扩展方法更好?
To check if pr is null and not if Value attribute of pr is null ?
您似乎只想检查 pr
是否为空。在这种情况下,三元运算符是您的选择:
var _var = pr == null ? "NA" : pr.Value;
或使用简单的 if
/else
.
这里有 3 种不同的场景,所以让我们来看看每种场景的语法:
Return
"NA"
如果pr
或pr.Value
为空:var _var = pr?.Value ?? "NA";
?.
运算符基本上会说 "ifpr
is null, return null for the whole expression and do not dereferencepr.Value
"因此,如果
pr
为空,?.
运算符将使表达式计算为空,或者如果pr.Value
为空,它也将计算为空,并且在这两种情况下情况下,?? "NA"
会将整个事情评估为"NA"
。这在结果方面等同于:
string _var; if (pr is null || pr.Value is null) _var = "NA"; else _var = pr.Value;
Return
"NA"
如果pr.Value
为空:var _var = pr.Value ?? "NA";
这就是你所拥有的。如果
pr
为空,这将抛出一个NullReferenceException
,但如果pr
为非空但pr.Value
为空,则计算为"NA"
。这在结果方面等同于:
string _var; if (pr.Value is null) // can throw NullReferenceException _var = "NA"; else _var = pr.Value;
Return
"NA"
如果pr
为空并且...如果pr.Value
为空怎么办???
和?.
都不能帮助你,但你可以使用三元运算符:var _var = (pr is null) ? "NA" : pr.Value;
如果
pr
为空,这将计算为"NA"
,如果pr
为非空,则计算为pr.Value
,因此如果pr
为非空,但pr.Value
为空。
注意,??
运算符也是延迟计算的,就像三元运算符一样,所以如果你有这个:
var _v = pr?.Value ?? ComputeTheValue();
并且该方法调用很昂贵,只有在 pr?.Value
实际上为空时才会对其进行评估,如果 pr
为非空且 pr.Value
为非空,则调用不会制作。