使用IEnumerable.Except

时间:2015-08-13 22:37:43

标签: c# .net ienumerable except

我在WinForm中获得了3 listViews 2 textbox和2 buttons

计划说明:该计划通过在listview中输入数字并点击添加textbox

button添加数字

目标:我希望能够使用IEnumerable.Except方法仅输出listView3中的唯一数字,例如下图中{{1}中唯一数字为3和7 }和listView1。     ListViewItem lvi = new ListViewItem(textBox1.Text);     listView1.Items.Add(LVI);

listView2

错误消息:System.Windows.Forms.ListView'不包含'Except'的定义,并且没有扩展方法'Except'可以找到接受类型为'System.Windows.Forms.ListView'的第一个参数'(是你错过了使用指令或程序集引用?)

enter image description here

2 个答案:

答案 0 :(得分:0)

你需要做这样的事情:

IEnumerable<string> common =
        Enumerable
            .Intersect(
                listView1.Items.Cast<ListViewItem>().Select(x => x.Text),
                listView2.Items.Cast<ListViewItem>().Select(x => x.Text));

IEnumerable<string> all =
        Enumerable
            .Union(
                listView1.Items.Cast<ListViewItem>().Select(x => x.Text),
                listView2.Items.Cast<ListViewItem>().Select(x => x.Text));

IEnumerable<string> unique = all.Except(common);

答案 1 :(得分:0)

Except未定义ListView。它实际上是System.Linq.Enumerable中定义的扩展方法。您可能会感到困惑,因为您可以从Except致电IList<T>(因为IList<T>来自IEnumerable<T>),但您尝试做的事情永远不会有效,因为{{ 1}}不会从ListView继承。你得到的例外是正确的行为。

要获得控件的IEnumerable<T>行为,您需要操作底层集合,然后将生成的集合对象绑定到Except控件。