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")

我有testand test2,and also something,但我无法获得something作为名称test2test没有名称的信息。

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 回答