0

を実装していDynamicObjectます。ではTryInvokeMethod、引数 (メソッドに渡される) に加えて、使用されている場合はパラメーターの名前も必要です。

binder.CallInfo.ArgumentNames確かに名前が提供されていることがわかりますが、それらを値に関連付けることはできません。そうする方法はありますか、それとも希望に反することを望んでいますか:

public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
    var names = binder.CallInfo.ArgumentNames;
    foreach (var arg in args)
    {
        arguments.Add(new Argument(arg));
    }
    //I need to associate the names and the args
    result = this;
    return true;
}

たとえば、次のような呼び出しを行うとします。

myDynamicObject.DynamicInvoke("test", something: "test2")

testtest2、 も持っていますが、 の名前で名前がなかっsomethingたという情報を取得できません。somethingtest2test

4

1 に答える 1

2

名前付きの引数は、名前のない引数が指定された後にのみ発生するという事実を使用する必要がありました (明らかなことを指摘してくれたuser629926に感謝します) と初期コード:

var names = binder.CallInfo.ArgumentNames;
var numberOfArguments = binder.CallInfo.ArgumentCount;
var numberOfNames = names.Count;

var allNames = Enumerable.Repeat<string>(null, numberOfArguments - numberOfNames).Concat(names);
arguments.AddRange(allNames.Zip(args, (flag, value) => new Argument(flag, value)));
于 2012-11-13T19:05:08.593 に答える