web-dev-qa-db-ja.com

修正方法:クロージャリシャーパー警告のforeach変数へのアクセス?

このReSharper警告が表示されます:クロージャ内のforeach変数へのアクセス。異なるバージョンのコンパイラでコンパイルすると動作が異なる場合があります

これは私がしていることです:

@foreach(var item in Model)
{
    // Warning underlines "item".
    <div>@Html.DisplayBooleanFor(modelItem => item.BooleanField)</div>
}

私の拡張子は次のとおりです。

public static MvcHtmlString DisplayBooleanFor<TModel, TValue>(
    this HtmlHelper<TModel> helper, 
    Expression<Func<TModel, TValue>> expression)
{
    bool value;

    try
    {
        var compiled = expression.Compile()(helper.ViewData.Model);
        value = Convert.ToBoolean(compiled);
    }
    catch (Exception)
    {
        value = false;
    }

    return MvcHtmlString.Create(value ? "Yes" : "No");
}

これは期待どおりに機能していることに注意してくださいが、どうすればこの警告を回避できますか?
ご協力いただければ幸いです。

26
Esteban

ブロックスコープの変数は警告を解決する必要があります。

@foreach(var item in Model)
{
    var myItem = item;
    <div>@Html.DisplayBooleanFor(modelItem => myItem.BooleanField)</div>
}
25
ChaosPandion

もう1つのオプションは、JetBrains.Annotations.InstantHandleAttribute属性をDisplayBooleanForメソッドに適用することです。

2
Ivan