我可以简单地进行冗长的速记字符串比较吗?

时间:2018-12-11 11:27:22

标签: c#

在我的一个应用程序中,我收到了一个像这样构建的数据结构:

  

父母:   {     X,     y,     z     儿童[]:      {       X,       ÿ      }   }

我选择父对象,然后遍历所有子对象。我使用这些数据来创建第三个对象。

如您所见,父对象的某些属性也可以在子对象中找到。父对象始终具有优先级,因此,每当遍历子对象时,我都需要检查是否具有属性x&y的值@父级别。如果这样做,那么我将使用父级的值,否则,将使用子级的值。

最初,我为我创建了用于这些检查的单独方法。我有一个整数,布尔值和字符串。

在拉取请求中,我被要求删除那些方法并使用?。我的比较运算符。我个人发现我的原始工作方式更具可读性,但是还可以。

现在,对于字符串比较,我发现要使用的表达式有点长:

B = parent.X != null ? (!string.IsNullOrEmpty(parent.X.XName) ? parent.X.XName
                                                              : child.X != null ? (!string.IsNullOrEmpty(child.X.XName) ? child.X.XName
                                                                                                                        : string.Empty)
                                                                                : string.Empty)
                     : (child.X != null ? !string.IsNullOrEmpty(child.X.XName) ? child.X.XName
                                                                               : string.Empty;

我想知道是否有简化方法?

1 个答案:

答案 0 :(得分:0)

var B = !string.IsNullOrEmpty(parent.X?.XName)
       ? parent.X.XName // parent.X is not null and parent.X.XName is neither null nor empty
       : (child.X?.XName ?? string.Empty);

这应该产生预期的输出。

即:

  • parent.X.XName,如果parent.X不是null并且parent.X.XName不是null或为空
  • child.X.XName(如果以上为假,并且child.Xchild.X.XName不是null
  • string.Empty(如果以上为假)

与以下内容相同:

var B = parent.X != null && !string.IsNullOrEmpty(parent.X.XName)
    ? parent.X.XName
    : child.X != null && child.X.XName != null
        ? child.X.XName
        : string.Empty;