如何处理“访问修改后的闭包”警告

时间:2019-02-26 17:26:48

标签: c#

给出以下代码段:

string body = "blabla";

/* some processing */

itinerary.Propositions.Each(prop =>
{
    /* some processing */
    body += "looking good";

    /* some more processing */
});

Resharper抛出“在本地关闭时访问”错误。现在,我已经阅读了很多有关此的内容,但到目前为止,还没有一种避免在这种情况下出错的方法。

那么...如何在没有警告的情况下仍然使用可变主体?

3 个答案:

答案 0 :(得分:0)

好吧,您正在修改在lambda之外声明的lambda中的变量,这是一个警告。因此,要么忽略警告,要么不要在lambda中修改警告。如果您了解为什么这是一个警告,那么您将更容易知道应该是否忽略该警告。

  

如何在没有警告的情况下仍然使用可变主体?

仅使用foreach

foreach (var prop in itinerary.Propositions)
{
    /* some processing */
    body += "looking good";

    /* some more processing */
}

答案 1 :(得分:0)

如果正在构建字符串,则使用+=的循环不是最佳的。它创建了许多新的不可变实例进行垃圾回收,并且可以用更漂亮的方式进行重写。

也许:

string body = "blabla" + string.Concat(itinerary.Propositions
  .Select(prop => { /* some processing */ return "looking good"; })
  );

如果需要分隔符,请使用string.Join而不是string.Concat

答案 2 :(得分:0)

如果您只想禁用警告:

// ReSharper disable once AccessToModifiedClosure
body += "looking good";

或按住Alt键并在“ body”上输入,然后

enter image description here