1

我正在返回一个匿名类:

var clients = from c in this.ClientRepository.SearchClientByTerm(term, 10)
    select new
    {
       id = c.Id,
       line1 = c.Address.Line1 ?? "Unknown Information ..."
    };

问题是地址可以为空,这意味着如果它为空,它会爆炸成一百万个。

我能想到的最优雅的解决方案是这个......

    line1 = c.Address != null && c.Address.Line1 != null 
               ? c.Address.Line1 : "Unknown Information ..."

有更好的方法吗?,我不喜欢失去使用空合并运算符然后不得不检查是否为空的能力。

4

3 回答 3

1

我能想到的唯一更简洁的方法是将Address属性的 getter 修改为永远不会返回 null,或者让构造函数始终初始化Address. 否则,您总是需要检查 null。

于 2010-11-09T12:36:51.433 回答
1

我只能想到这个:

line1 = c.Address.HasValue ?  c.Address.Line1.HasValue ? c.Address.Line1 : "Line1 unknown." : "Address unknown."

您还可以修改您的 Address 属性 get{} 方法以检查内容并返回适当的值,最好缓存结果,这样它就不会一遍又一遍地运行相同的检查。

于 2010-11-09T12:37:56.990 回答
0

我会ClientRepository.SearchClientByTerm()返回一个初始化Address并(可能)设置Line1在那里。

于 2010-11-09T12:44:56.600 回答