我有以下ListView
:如何從ListView控件在C#中使用LINQ刪除項目
和我創建的項目的List<string>
我想行的列表,以從ListView控件刪除:
List<String> lst =new List<String>{"A1","A2"};
我知道我可以刪除使用通過索引迭代和刪除利用RemoveAt()
功能項的行,但有什麼辦法做到這一點使用LINQ?
我有以下ListView
:如何從ListView控件在C#中使用LINQ刪除項目
和我創建的項目的List<string>
我想行的列表,以從ListView控件刪除:
List<String> lst =new List<String>{"A1","A2"};
我知道我可以刪除使用通過索引迭代和刪除利用RemoveAt()
功能項的行,但有什麼辦法做到這一點使用LINQ?
至於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
要做到這一點,你可以排除的項目清單(以及但是你想填充他們,但在這種情況下,我選擇一個編譯時間列表,然後你只需在第一個列表中選擇所有項目,並使用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
}
如果'名單'包含超過兩個,我們不能做到這一點嗎?但是通過'List'迭代我們可以做到這一點。但是我只需要一個LINQ接口(這僅僅用於學習目的) –
2010-11-01 13:07:00
如果你有一個這樣的列表,你可以遍歷列表並使用上面提到的解決方案。你應該也可以使用lw.Items.RemoveByKey(string key)。 – Mikael 2010-11-01 13:29:38
@Pramodh:查看我更新的帖子。 – abatishchev 2010-11-01 13:31:24