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それを にして、格納されたデリゲートを適切な型にキャスト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# にはパズルのピースはありません。

  • 指定されていない型のジェネリック型の非ジェネリック変数を持つことはできません
  • そのような架空の署名に一致する関数を作成することはできません
  • 関数を呼び出して型を指定することはできません。

だから答えはNOです。同様の動作を実現する方法は複数あるため、実際の目標を指定すると、誰かがアプローチを思いつきます。

于 2012-05-02T00:31:20.480 に答える