jae*_*kie 4 c# linq resharper lambda ternary-operator
目前..我的代码看起来像这样.
PhoneNumber = x.PhoneNumbers.FirstOrDefault() != null ? x.PhoneNumbers.FirstOrDefault().PhoneNumber : string.Empty,
PhoneNumbers是一个 ICollection<PhoneNumber>
这也是一个.Select(),所以我不能真正为它创建一个变量.
Resharper抱怨说x.PhoneNumbers.FirstOrDefault()可能是空的,说实话,并不是因为我要做两次FirstOrDefault的想法而卖掉的.
任何其他的想法,我在想可能有另一种Lambda方法,我可以做类似的事情.
Mar*_*rot 12
PhoneNumber = x.PhoneNumbers.Select(pn => pn.PhoneNumber).FirstOrDefault() ?? "",
Run Code Online (Sandbox Code Playgroud)
第一个选择,如Markus的:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
.FirstOrDefault() ?? "";
Run Code Online (Sandbox Code Playgroud)
另一种选择:
PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
.DefaultIfEmpty("")
.First();
Run Code Online (Sandbox Code Playgroud)
或者如果你发现自己做了很多,你可以编写自己的方法来结合这两者:
public static TElement ProjectedFirstOrDefault<TSource, TElement>
(this IEnumerable<TSource> source,
Func<TSource, TElement> selector,
TElement defaultValue) where TElement : class
{
var firstElement = source.FirstOrDefault();
return firstElement == null ? defaultValue : selector(firstElement);
}
Run Code Online (Sandbox Code Playgroud)
然后:
PhoneNumber = x.PhoneNumbers.ProjectedFirstOrDefault(x => x.PhoneNumber, "");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |