2012-09-22 11 views
25

मुझे यह ReSharper चेतावनी मिल रही है: बंद करने में foreach चर तक पहुंच। संकलक के विभिन्न संस्करणों के साथ संकलित होने पर अलग व्यवहार हो सकता है।मैं कैसे ठीक कर सकता हूं: बंद करने वाले पुनर्विक्रेता चेतावनी में foreach चर तक पहुंच?

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) 
{ 
    // Warning underlines "item". 
    <div>@Html.DisplayBooleanFor(modelItem => item.BooleanField)</div> 
} 

मेरे विस्तार इस प्रकार है:

यह मैं क्या कर रहा है?
मैं प्रदान की गई किसी भी सहायता की सराहना करूंगा।

+2

यदि आप इसके साथ करते हैं तो आप 'अभिव्यक्ति <>' का उपयोग क्यों कर रहे हैं, उस पर कॉल करें। कॉम्पाइल() '? 'Func <>' का उपयोग क्यों न करें? – hvd

+0

आप केवल एक बूल के बजाय अभिव्यक्ति में क्यों गुजर रहे हैं? –

+0

@CoosPandion: यह मेरे लिए उपयोगी है क्योंकि मुझे अपने विचार पर अगर किसी का उपयोग करने की आवश्यकता नहीं है। – Esteban

उत्तर

25

एक ब्लॉक स्कॉप्ड वैरिएबल चेतावनी को हल करना चाहिए।

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

धन्यवाद, यह चेतावनी तय करता है, कोई विचार क्यों ऐसा होता है ? – Esteban

+10

@Esteban जेटब्रेन विकी [यहां] पर अधिक है (http://confluence.jetbrains.net/display/ReSharper/Access+to+modified+closure) (जो आर # के आपके संस्करण के आधार पर सीधे लिंक किया जा सकता है लाइटबुल मेन्यू 'रीशेर्पर का सुझाव क्यों है?); यह भी देखें [यह SO सवाल] (http://stackoverflow.com/questions/235455/access-to-modified-closure?rq=1) – AakashM

+2

@Esteban यह अब तक का सबसे अच्छा स्पष्टीकरण है: http: // stackoverflow। com/प्रश्न/14907987/पहुँच करने के लिए foreach-चर-इन-बंद – ForceMagic

2

एक अन्य विकल्प DisplayBooleanFor विधि के लिए JetBrains.Annotations.InstantHandleAttribute विशेषता लागू किया जा सके।

संबंधित मुद्दे