使用LINQ编写以下内容是否有更简洁,更优雅的方式?
var actorName = string.Empty;
foreach (var myProperty in myProperties)
{
if (myProperty .PropertyName == "ActorName")
{
actorName = myProperty .PropertyValue;
break;
}
}
答案 0 :(得分:5)
var actorName = myProperties
.FirstOrDefault(x => x.PropertyName == "ActorName")
.PropertyValue;
如果找不到任何内容,则会给出NPE(FirstOrDefault
默认返回null
)。
要解决此问题,请改为使用两个语句:
var actor = myProperties
.FirstOrDefault(x => x.PropertyName == "ActorName");
var actorName = actor == null ? string.Empty : actor.PropertyValue;
答案 1 :(得分:2)
除了Jeroen的答案之外......首先检查null
更安全..因为FirstOrDefault
在没有任何内容匹配时返回null
:
var actor = myProperties
.FirstOrDefault(x => x.PropertyName == "ActorName");
if (actor != null)
actorName = actor.PropertyValue;
答案 2 :(得分:-1)
纯粹的LINQ版本,虽然我更喜欢Simon的回答。
var actorName = myProperties
.Where(x => x.PropertyName == "ActorName")
.Select(x => x.PropertyValue)
.Concat(new[]{ string.Empty })
.First();