为什么没有局部变量捕获?C#关闭行为

sfe*_*982 0 c#

我在IMultiValueConverter中编写了这个转换代码

public object Convert(object[] values ...)
{
   return new Microsoft.Practices.Composite.Presentation.Commands.DelegateCommand<object>(
                delegate
                {
                    foreach (ICommand cmd in values)
                    {
                        cmd.Execute(null);
                    }
                });
}
Run Code Online (Sandbox Code Playgroud)

values参数是两个命令对象,但是当回调执行(WPF mulibinding)时,values数组仅包含空值.为什么?如何解决这个问题?

Jon*_*eet 6

您的方法中没有任何内容正在更改其值values,因此在这种情况下,就好像values直接捕获变量一样.关于被捕获的变量的正常警告是不适用的 - 当然,除非您在方法中有更多代码,但您没有向我们展示...

请注意,如果在方法返回之后但在委托执行之前其他内容更改了数组中的值,则仍会看到这些更改.如果你不想这样,你应该自己克隆数组:

public object Convert(object[] values)
{
   object[] copy = (object[]) values.Clone();
   return new DelegateCommand<object>(
                delegate
                {
                    foreach (ICommand cmd in copy)
                    {
                        cmd.Execute(null);
                    }
                });
}
Run Code Online (Sandbox Code Playgroud)

从你的问题中发现的情况并不是很清楚,但希望这会有所帮助......