为什么这个LINQ查询不起作用?
我试图帮助其他人并写下这个查询:
var foundTab = (from tab in tabControl1.TabPages where tab.Name == "tabName" select tab).First();
他们报告说他们收到了这个错误:
找不到源类型System.Windows.Forms.TabControl.TabPageCollection’的查询模式的实现。 ‘哪里’找不到。 考虑明确指定范围变量“tab”的类型。
我检查了MSDN和TabPageCollection
实现IList
, ICollection
, IEnumerable
。 那么,这里发生了什么? 该错误意味着什么,是否有另一种方法来查询Tab Control的TabPages
属性?
试试这个:
var tab = (from System.Windows.Forms.TabPage tab in tabControl1.TabPages where tab.Name == "tabName" select tab).First();
此代码指定范围变量的类型。
TabPageCollection
实现IEnumerable
但不是IEnumerable
,这是LINQ使用的。 要修复,请使用如下所示的强制转换方法:
var foundTab = (from tab in tabControl1.TabPages.Cast() where tab.Name == "tabName" select tab).First();
但是,但是……? 如果你有名字,你可以直接引用它吗? 的TabPages [ “TABNAME”]
试试这个:
var tab = tabControl1.TabPages.FirstOrDefault(t => t.Name == "tabName");
另外,请确保你有
using System.Linq;
在文件的顶部。
迪伦