繁体   English   中英

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

[英]Why there is no local variable capture? C# closure bahavior

我在IMultiValueConverter中编写了此转换代码

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

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

您的方法没有什么改变value的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);
                    }
                });
}

从您的问题中并不清楚这是怎么回事,但希望能对您有所帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM