delegate IEnumerable<T> GetFromSQLDelegate<T>(...);
public GetFromSQLDelegate myFunctionToCall;
上面没有编译,因为myFunctionToCall没有指定类型。我正试图“存储”一个通用委托,以便我以后可以调用它作为常规通用函数:
// ... somewhere in another code base ...
return MyObject.myFunctionToCall<string>(...);
C#抱怨因为我没有在委托存储属性上指定具体类型。有没有(好)方法来“存储”能够调用泛型函数而不实现各种具体类型委托方案的委托?
答案 0 :(得分:4)
您可以将值存储为System.Delegate
,将其设为private
,并定义将存储的委托投射到相应类型的函数GetDelegate<T>
:
private Delegate storedDelegate;
public myFunctionToCall<T> GetDelegate<T>() {
return (myFunctionToCall<T>)storedDelegate;
}
然后你可以这样称呼它:
return MyObject.GetDelegate<string>()(...);
()(...)
语法周围有一点点丑陋,但应该可以解决这个问题。
答案 1 :(得分:0)
C#中没有任何拼图:
所以答案是否定的。有多种不同的方法可以实现类似的行为,所以如果你指定你的实际目标是什么,那么有人会提出一种方法。