在c#中,可以创建一个类似的函数列表:
var myList = new List< Func<Foo> >();
这将允许不带参数的函数(委托)并返回类型为Foo的值添加到列表中。如下所示:
Foo myFunc1() { ... }
将是该列表的有效成员。我的问题是,如何声明模板化函数的类型?如何构建List&lt;&gt;将保存表格的功能:
T myFunc2<T>() { ... }
答案 0 :(得分:2)
你需要在一个模板化的类或方法中做到这一点。然后,您可以像引用特定类型Foo一样引用泛型类型T.
换句话说:
public class FuncContainer<T>
{
private List<Func<T>> list = new List<Func<T>>();
public void Fill()
{
// Initialize list
}
}
答案 1 :(得分:1)
我认为到目前为止其他答案都误解了这个问题......如果我读得正确的话,我认为你不能真正做到这一点。我是对的,你说你想写这个:
List<???> list = new List<???>(); // This line won't work
list.Add(Method1);
list.Add(Method2);
...
static int Method1() { ... }
static string Method2() { ... }
如果我误解了,并且你的方法或类中的T
的简单泛型类型参数就足够了,我将删除这个答案:)
你最接近上面会是这样的:
public class FuncList
{
private readonly List<Delegate> list = new List<Delegate>();
public void Add<T>(Func<T> func)
{
list.Add(func);
}
}
然后您将其用作:
FuncList list = new FuncList();
list.Add<int>(Method1);
list.Add<string>(Method2);
以后你用做 这个列表很棘手......你有什么想法?
答案 2 :(得分:0)
是的,第一个签名完全有效。
您建议的最后一个功能的签名如下
List<Func<T>> x;
它包含一个不带参数并生成T值的委托列表。