2012-01-23 11 views
6

मेरे पास निम्न अभिव्यक्ति है, जहां a.AnswerIdlong? प्रकार का है। ReSharper चुनिंदा फ़ंक्शन में संभावित InvalidOperationException की चेतावनी देता है। क्या कभी ऐसा कोई मामला है जहां यह वास्तव में हो सकता है? (कोने-मामलों में भी ठीक हैं)आर # चेतावनी पर अनुवर्ती: संभावित 'System.InvalidOperationException'

long[] ids = answers.Where(a => a.AnswerId.HasValue) 
        .Select(a => a.AnswerId.Value) 
        .ToArray(); 
+0

जेटब्रेन मुद्दे ट्रैकर पर इन दो मुद्दों का पालन करके इन मुद्दों को संबोधित करते समय आप ट्रैक कर सकते हैं: http://youtrack.jetbrains.net/issue/RSRP-213609 http://youtrack.jetbrains.net/issue/RSRP -200,225 – AakashM

उत्तर

7

जब से तुम Wherea.AnswerId एक मूल्य है जो चेक इन, a.AnswerId.Value फेंक कभी नहीं होगा एक InvalidOperationException (जब तक कि एक और धागा एक ही समय में डेटा बदल रहा है)। रिशेर्पर में बहुत अच्छी कोड विश्लेषण क्षमताएं हैं, लेकिन यह सबकुछ स्पॉट नहीं कर सकती है, और इस मामले में यह नहीं पता कि Where को पर कॉल करने के लिए सुरक्षित बनाता है, इसलिए चेतावनी। तो आप इस चेतावनी को सुरक्षित रूप से अनदेखा कर सकते हैं।

4

दुर्भाग्यवश, रीशेर्पर अक्सर झूठी सकारात्मकताओं के साथ आता है। इस मामले में, AnswerIdWhere और Select पर कॉल में समान मान देता है, तब तक कोई समस्या नहीं होगी। (सुनिश्चित करें कि AnswerId कुछ पागल कार्यान्वयन कि एक नंबर आप इसे उपयोग और null दूसरी बार पहली बार रिटर्न नहीं है सुनिश्चित करें।)

3

दुर्भाग्य से, ReSharper LINQ lambdas अनुक्रम के माध्यम से हालत चेकों ट्रैक नहीं कर सकते। यह एक ज्ञात समस्या है।

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