我有一個像這樣的元組陣列:
(Type, Func<int, bool>)[][] Formats;
我也有一個Type typ和一個int i。
然后我需要一個IEnumerable<(Type, Func<int,bool>[])>(又名回傳項),其中潛在匹配通過Item1(即Type)匹配typ格式來評估.IsAssignableFrom(typ)。如果我們得到一個匹配,那么我們還沒有完成:我們只有在Item2.Invoke(i)評估為真時才包含它。
var results = Formats.Where(f => f.Where(o => o.Item1.IsAssignableFrom(typ)).First().Item2.Invoke(i));
這是無效的,因為我認為如果回傳專案沒有要在.First()呼叫中檢索的內部專案,它會拋出InvalidOperationException“序列不包含資料”,因為您不能呼叫.First()空序列。
如果為空,您能否幫助重述此 Linq 以忽略該序列?
uj5u.com熱心網友回復:
Enumerable.FirstOrDefault()這是使用該方法的絕佳機會:
回傳序列的第一個元素,如果沒有找到元素,則回傳默認值。
在這種情況下,“默認值”將是(null, null). 因此,使用FirstOrDefault()而不是First(),然后適當地忽略專案。像這樣的東西可能會起作用:
var results = Formats.Where(f => f.Where(o => o.Item1.IsAssignableFrom(typ)).FirstOrDefault().Item2?.Invoke(i) ?? false);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428926.html
上一篇:EFLinq包含最后一個
