1

次のシグネチャを使用して、メソッド(関数)をExpandoObjectに割り当てようとしています。

public List<string> CreateList(string input1, out bool processingStatus)
{
  //method code...
}

私はコンパイルされない以下のコードのようなことをしようとしました:

dynamic runtimeListMaker = new ExpandoObject();
runtimeListMaker.CreateList =
     new Func<string, bool, List<string>>(
           (input1, out processingStatus) =>
                {
                     var newList = new List<string>();

                     //processing code...

                     processingStatus = true;
                     return newList;
                });

残念ながら、CreateList署名を変更することはできません。下位互換性が失われるため、書き直すことはできません。デリゲートを使用してこれを回避しようとしましたが、実行時に「非デリゲートタイプを呼び出せません」という例外が発生しました。これは、デリゲートを正しく割り当てていないことを意味していると思います。構文を正しくするためのサポートが必要です(デリゲートの例もOKです)。ありがとう!!

4

2 に答える 2

5

このサンプルは、期待どおりにコンパイルおよび実行されます。

dynamic obj = new ExpandoObject();
obj.Method = new Func<int, string>((i) =>
    {
        Console.WriteLine(i);
        return "Hello World";
    });

obj.Method(10);
Console.ReadKey();

ステートメントの問題は、Funcが署名のように出力パラメーターを使用しないことです。

(input1, out processingStatus)

現在のメソッドを割り当てたい場合、Funcを使用することはできませんが、独自のデリゲートを作成することはできます。

    public delegate List<int> MyFunc(int input1, out bool processing);

    protected static void Main(string[] args)
    {
        dynamic obj = new ExpandoObject();
        obj.Method = new MyFunc(Sample);

        bool val = true;
        obj.Method(10, out val);
        Console.WriteLine(val);
        Console.ReadKey();
    }

    protected static List<int> Sample(int sample, out bool b)
    {
        b = false;
        return new List<int> { 1, 2 };
    }
于 2011-03-24T21:34:06.747 に答える
0

C#で許可されていないパラメーターにoutパラメータータイプを使用するというコードの問題。processingStatus

于 2011-03-24T21:36:59.350 に答える