2
delegate IEnumerable<T> GetFromSQLDelegate<T>(...);
public GetFromSQLDelegate myFunctionToCall;

上面没有编译,因为 myFunctionToCall 没有指定类型。我正在尝试“存储”一个泛型委托,以便以后可以将其作为常规泛型函数调用:

// ... somewhere in another code base ...
return MyObject.myFunctionToCall<string>(...);

C# 抱怨是因为我没有在委托存储属性上指定具体类型。有没有一种(好的)方法来“存储”能够调用通用函数而不实现各种具体类型委托场景的委托?

4

2 回答 2

4

您可以将值存储为System.Delegate、 make it private,并定义一个GetDelegate<T>将存储的委托转换为适当类型的函数:

private Delegate storedDelegate;

public myFunctionToCall<T> GetDelegate<T>() {
    return (myFunctionToCall<T>)storedDelegate;
}

然后你可以这样称呼它:

return MyObject.GetDelegate<string>()(...);

语法有点丑陋()(...),但它应该可以解决问题。

于 2012-05-02T00:30:42.340 回答
0

在 C# 中你的拼图没有碎片:

  • 你不能有非指定类型的泛型类型的非泛型变量
  • 您无法创建与此类虚构签名匹配的函数
  • 您不能调用函数并指定类型。

所以答案是否定的。有多种不同的方法可以实现类似的行为,所以如果你指定你的实际目标是什么,有人会想出一个方法。

于 2012-05-02T00:31:20.480 回答