C#delegate with generic返回List of List

时间:2017-06-16 07:17:05

标签: c# generics delegates

我需要定义一个具有通用List返回类型的委托,最好的方法是什么?

delegate List<T> TestDelegate(string arg1, string arg2);

然后我想这样做

TestDelegate td = new TestDelegate(Method1);

或者

TestDelegate td = new TestDelegate(Method2);

Method1和Method2的签名:

List<MyClass1> Method1(string arg1, string arg2)
List<MyClass2> Method2(string arg1, string arg2)

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

您可以定义抽象类:

public abstract class MyClass{ 
    public String GenericProperty{get;set;}
}

和你的具体课程:

public MyClass1 : MyClass {
    public String SpecificProperty{get; set;}
}
public MyClass2 : MyClass {
    public String OtherSpecificProperty{get; set;}
}

然后代表成为:

delegate List<MyClass> TestDelegate(string arg1, string arg2);
List<MyClass> Method1(string arg1, string arg2)
List<MyClass> Method2(string arg1, string arg2)

List<MyClass> = new TestDelegate(Method1);
List<MyClass> = new TestDelegate(Method2);

答案 1 :(得分:0)

您可以使委托本身具有通用性:

delegate List<T> TestDelegate<T>(string arg1, string arg2);

var td1 = new TestDelegate<MyClass1>(Method1);
var td2 = new TestDelegate<MyClass2>(Method2);

请注意委托声明中的其他<T>