5

私は次のように書こうとしています: 別のメソッド "B" をパラメーターとして取るメソッド "A" と、このメソッド B の未知の数のパラメーター (params object[] args) を書きたいと思います。ここで、メソッド A 内で、パラメーター args を使用して B を呼び出したいと思います。B は、A にも返してほしいオブジェクトを返します。

これは少し奇妙に聞こえるので、いくつかのサンプル コードを追加します。

public object A(Func<object> B, params object[] args)
{
    object x = B.Method.Invoke(args);

    return x;
}

問題は、 Func がそのように機能しないことです。誰もこれを行う方法を知っていますか?

よろしく、クリスチャン

4

4 に答える 4

3

Func<object>引数をとらず、 を返すメソッドのデリゲートですobject。に変更するとFunc<object,object>、引数を取り、オブジェクトを返します。

public object A(Func<object, object> B, params object[] args)
{
    object x = B(args);

    return x;
}
于 2011-01-24T10:26:33.153 に答える
3
void Main()
{
    Func<int> m1=()=>1;
    Console.WriteLine(A(m1));

    Func<int,int> m2=i=>i;
    Console.WriteLine(A(m2,55));
}

object A(Delegate B,params object[] args)
{

    return B.Method.Invoke(B.Target,args);
}

...さようならタイプセーフ

于 2011-01-24T10:31:44.487 に答える
1

これはそれを行う必要があります:

public object A(Func<object[], object> B, params object[] args) 
{     
     object x = B(args);     
     return x; 
}
于 2011-01-24T10:25:58.653 に答える
1

次のようなコードが必要です。

public object A(Func<object[], object> B, params object[] args)
{
    object x = B(args);

    return x;
}

Func オーバーロードが引数のオブジェクト配列を受け入れる必要があることを見逃しています。

とにかく、このメソッド「A」がパラメーターなしの関数を受け入れる必要がある場合は、「A」のパラメーターなしの関数パラメーター オーバーロードを作成する必要があります。

于 2011-01-24T10:27:43.460 に答える