最佳答案
编辑:
当然我真正的代码不是这样的。我尝试编写半伪代码,使它更清楚我想做什么。
看起来只是把事情搞砸了。
所以,我真正想做的是:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
我想也许我可以用反射把它变成一个循环。所以问题是: 我该怎么做。我有 非常浅显的反思知识。因此,代码示例将是伟大的。
情况是这样的:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var i in interfaces)
{
Method<i>(); // Get compile error here!
}
原文:
嗨!
我试图循环遍历一个名称空间中的所有接口,并将它们作为参数发送给类似下面这样的通用方法:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var interface in interfaces)
{
Method<interface>(); // Get compile error here!
}
}
我得到的错误是“类型名称预期,但局部变量名称发现”。 如果我尝试
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
我得到“不能对类型为‘ method group’和‘ System.Type’的操作数应用运算符‘ <’” 有办法解决这个问题吗?