2010-11-01 132 views

回答

1

至於A1/A2是關鍵,沒有LINQ是必需的:?

foeach(var a in new[] { "A1", "A2" }) 
    lw.Items.RemoveByKey(a); 

爲什麼不


但是如果你想不惜任何代價使用LINQ,編寫您自己的擴展方法:

public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action) 
{ 
    foreach (var item in collection) 
     action(item); 
} 

,並使用這種方式:

new[] { "A1", "A2" }.ForEach(a => lw.RemoveByKey(a)); 

但是請記住,這是一個衆所周知的但有爭議的方法。

順便說一句,List<T>已經有這樣的擴展方法,但我的作品對任何IEnumerable<T>

new List<string> { "A1", "A2" }.ForEach(); // evokes List<T>.ForEach 
new[] { "A1", "A2" }.ForEach(); // evokes my 
new List<string> { "A1", "A2" }.AsEnumerable().ForEach(); // evokes my, I guess 
+0

如果'名單'包含超過兩個,我們不能做到這一點嗎?但是通過'List'迭代我們可以做到這一點。但是我只需要一個LINQ接口(這僅僅用於學習目的) – 2010-11-01 13:07:00

+0

如果你有一個這樣的列表,你可以遍歷列表並使用上面提到的解決方案。你應該也可以使用lw.Items.RemoveByKey(string key)。 – Mikael 2010-11-01 13:29:38

+0

@Pramodh:查看我更新的帖子。 – abatishchev 2010-11-01 13:31:24

0

要做到這一點,你可以排除的項目清單(以及但是你想填充他們,但在這種情況下,我選擇一個編譯時間列表,然後你只需在第一個列表中選擇所有項目,並使用Except方法從其他列表中排除項目

List<string> lst = new List<string>{"A1", "A2", "A3" }; 
List<string> excludedList = new List<string>{ "A1", "A2" }; 

var list = lst.Select(e => e) 
       .Except(excludedList); 

foreach (var a in list) 
{ 
    Console.WriteLine(a + "\n"); //Displays A3 
} 
相關問題