我在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'的第一个参数'(是你错过了使用指令或程序集引用?)
答案 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
控件。