この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");
}
これは期待どおりに機能していることに注意してくださいが、どうすればこの警告を回避できますか?
ご協力いただければ幸いです。
ブロックスコープの変数は警告を解決する必要があります。
@foreach(var item in Model)
{
var myItem = item;
<div>@Html.DisplayBooleanFor(modelItem => myItem.BooleanField)</div>
}
もう1つのオプションは、JetBrains.Annotations.InstantHandleAttribute
属性をDisplayBooleanFor
メソッドに適用することです。