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

时间:2010-10-06 12:59:40

标签: 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);
                    }
                });
}

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

1 个答案:

答案 0 :(得分: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);
                    }
                });
}

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