我有几个基于Form和我的自定义界面扩展的表单类。
Interface InterfaceForms{
void InterfaceFunc1();
}
public partial class child1 : Form, InterfaceForms
{
public child1(){}
public InterfaceFunc1(){}
}
public partial class child2 : Form, InterfaceForms
{
public child2(){}
public InterfaceFunc1(){}
}
我将所有表单类对象添加到列表中,如下所示:
List<Form> lsf = new List<Form>();
然后我尝试加载我的表单类,如下所示:
var fr = from Form item in lsf
where item.Name == "child1"
select item;
Form frm = (Form)fr;
现在,我的问题是我无法访问InterfaceFunc1()。
你介意我告诉我如何实现这个目标吗?请注意,每次frm类型可能不同(child1,child2&amp; etc),但所有这些都是从Form和InterfaceForm扩展的。
答案 0 :(得分:2)
您需要将其转换为InterfaceForms
:
var fr = from Form item in lsf
where item.Name == "child1"
select item;
Form frm = (Form)fr;
var iFaceFrm = frm as InterfaceForms;
if (iFaceFrm != null)
{
//use the iFaceFrm or frm here
}
修改强>
您的LINQ语句的问题是声明类型,推断LINQ语句的类型,因此您不要将它放在select中:
var fr = from item in lsf
where item.Name == "child1"
select item;
或者,如果你想在程序上这样做:
var fr = lsf.Where(f => f.Name == "child1").FirstOrDefault();