如果我的對象列表包含 vb.net 或 C# 中類型列表中的所有類型,我將嘗試返回一個布爾值。我正在努力編寫一個 lambda 表達式來實現這一點。這可以使用 lambda 謂詞來完成嗎?我知道可以通過 for each 循環輕松完成。VB.netPublic Class Widget Public wobbly As String Public sprocket As String Public bearing As StringEnd ClassPublic Sub test() Dim wList As New List(Of Widget) wList.Add(New Widget() With {.bearing = "xType", .sprocket = "spring", .wobbly = "99"}) wList.Add(New Widget() With {.bearing = "yType", .sprocket = "sprung", .wobbly = "45"}) wList.Add(New Widget() With {.bearing = "zType", .sprocket = "straight", .wobbly = "17"}) Dim typeList As New List(Of String) From {"xType", "yType", "zType"} Dim containsAllTypes As Boolean = wList.TrueForAll(Function(a) a.bearing.Equals(typeList.Where(Function(b) b = a.bearing))) Debug.WriteLine(containsAllTypes.ToString)End SubC#public class Widget{ public string wobbly; public string sprocket; public string bearing;}public void test(){ List<Widget> wList = new List<Widget>(); wList.Add(new Widget { bearing = "xType", sprocket = "spring", wobbly = "99" }); wList.Add(new Widget { bearing = "yType", sprocket = "sprung", wobbly = "45" }); wList.Add(new Widget { bearing = "zType", sprocket = "straight", wobbly = "17" }); List<string> typeList = new List<string> { "xType", "yType", "zType" }; bool containsAllTypes = wList.TrueForAll(a => a.bearing.Equals(typeList.Where(b => b == a.bearing))); Debug.WriteLine(containsAllTypes.ToString());}編輯,感謝所有快速回答,我看到有幾種方法可以做到這一點,現在對表達式中發生的事情有了更好的理解。
5 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
嘗試var containsAllTypes = typeList.All(x => wList.Select(x => x.bearing).Contains(x))

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
var containsAll = typeList.All(type => wList.Any(widget => widget.bearing.Equals(type)));
翻譯后,對于所有類型typeList
來說,列表中的任何(至少一個)小部件都具有該類型。

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
我相信您想要的是以下內容:
bool containsAllTypes1 = wList.TrueForAll(a => null != typeList.Find(b => b == a.bearing));
您還可以使用 System.Linq,如下所示:
bool containsAllTypes2 = wList.All(a => typeList.Any(b => b == a.bearing));

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
較短的是
containsAllTypes = wList.Where(x => typeList.Contains(x.bearing)).Count() == typeList.Count;
或者
containsAllTypes = wList.Select(x => x.bearing).Except(typeList).Count() == 0;
或者
containsAllTypes = wList.Select(x => x.bearing).Intersect(typeList).Count() == typeList.Count;

森欄
TA貢獻1810條經驗 獲得超5個贊
Dim containsAllTypes As Boolean = wList.All(Function(a) typeList.Any(Function(b) b = a.bearing))
對于 wList 中的每個值,它會檢查 typeList 中的任何值是否與 wList 方位值匹配。
- 5 回答
- 0 關注
- 241 瀏覽
添加回答
舉報
0/150
提交
取消