6

在你急于考虑之前??空合并运算符:

string result = myParent.objProperty.strProperty ?? "default string value if strObjProperty is null";

这里的问题是当 myParent 或 objProperty 是否为 null 时,它甚至会在达到 strProperty 的评估之前抛出异常。

为了避免以下额外的空值检查:

if (myParent != null)
{
   if (objProperty!= null)
   {
       string result = myParent.objProperty.strProperty ?? "default string value if strObjProperty is null";
   }
}

我通常使用这样的东西:

string result = ((myParent ?? new ParentClass())
                .objProperty ?? new ObjPropertyClass())
                .strProperty ?? "default string value if strObjProperty is null";

因此,如果对象为空,那么它会创建一个新对象,以便能够访问该属性。

这不是很干净。

我想要类似'???'的东西 操作员:

string result = (myParent.objProperty.strProperty) ??? "default string value if strObjProperty is null";

...它将保留括号内的任何“null”以返回默认值。

感谢您的提示。

4

1 回答 1

10

C# 6 附带的空传播运算符呢?

string result = (myParent?.objProperty?.strProperty)
                ?? "default string value if strObjProperty is null";

它检查myParent,objPropertystrProperty是否为 null 并在其中任何一个为 null 时分配默认值。

我通过创建一个检查空的扩展方法扩展了这个特性:

string result = (myParent?.objProperty?.strProperty)
                .IfNullOrEmpty("default string value if strObjProperty is null");

刚刚在哪里IfNullOrEmpty

public static string IfNullOrEmpty(this string s, string defaultValue)
{
    return !string.IsNullOrEmpty(s) ?  s : defaultValue);
}
于 2016-04-29T09:12:57.383 回答