我试图将这个foreach循环移动到linq:
compData = componentData[0];
foreach (var componentTraceData in componentData)
{
if (!string.IsNullOrEmpty(componentTraceData.CompName))
{
compData = componentTraceData;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我试过的:
var tt = (from n in componentData
where !string.IsNullOrEmpty(n.CompName)
select n).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
componentData[0]如果linq没有找到任何结果我怎么能接受?
Ser*_*rvy 11
拿走你现有的那一行并?? componentData[0]在最后添加.
??是空合并运算符.这只是简写,"如果我左边的内容为null,则返回我右边的内容.如果它不为null,则返回."
您可以使用Enumerable.DefaultIfEmpty并指定自定义默认值:
var result = componentData.Where(n => !string.IsNullOrEmpty(n.CompName))
.DefaultIfEmpty(componentData.ElementAtOrDefault(0))
.First();
Run Code Online (Sandbox Code Playgroud)
请注意,您现在可以First安全使用,因为序列不能再为空.如果源序列为空,ElementAtOrDefault将返回default(T)(对于引用类型为null).当您IList<T>直接使用索引器时,这将防止异常.
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |