2016-04-21 19 views
8

मेरे पास एक विस्तार विधि है, जो एक मूल्य देता है। ,यदि वापसी मूल्य का उपयोग नहीं किया जाता है तो क्या चेतावनी प्राप्त करना संभव है?

public static byte SetBit(this byte b, int bitNumber, bool value) 
{ 
    if (value) 
    { 
     return (byte)(b | (1 << bitNumber)); 
    } 
    return (byte)(b & ~(1 << bitNumber)); 
} 

दिए गए मान एक चर करने के लिए फिर से असाइन किया जाना आवश्यक है क्योंकि मैं नहीं जोड़ सकते this और ref: इस मामले में यह एक बाइट में एक विशिष्ट बिट स्थापित करना चाहिए

byte myByte = 3; 
myByte = myByte.SetBit(1, false); 

यह है दुर्घटना से असाइनमेंट को भूलना आसान है। कोई सोच सकता है, विधि सीधे मूल्य बदलती है।

String.Replace, Resharper?/VisualStudio के लिए? मुझे चेतावनी है, कि शुद्ध विधि के वापसी मान नहीं किया जाता है:

String

यह भी किसी तरह से मेरी विधि के लिए संभव है?

+0

लिखने के लिए Resharper Annotations

एक Nuget पैकेज हो रहा है "लौटाया गया मूल्य फिर से एक चर को आवंटित करने की आवश्यकता है, क्योंकि मैं इसे गठबंधन नहीं कर सकता और रेफरी कर सकता हूं" वास्तव में? मैंने अभी कोशिश की, और यह ठीक काम किया ... –

+0

'इस बाइट बी' को रेफरी करें मेरे लिए संकलित नहीं होगा @ किर्कवॉल –

+1

वैकल्पिक रूप से, एक [Roslyn विश्लेषक] लिखें (https://github.com/dotnet/roslyn/wiki/ कैसे-लिखने-एसी% 23-विश्लेषक-और-कोड-फिक्स) - यह आपके कोड-बेस के लिए कुछ पैटर्न लागू करने का एक शानदार तरीका है। आप इसे भी लिख सकते हैं ताकि यह आपके समाधान में एम्बेड हो - कंपनी-विशिष्ट परियोजनाओं के लिए बढ़िया। –

उत्तर

4

वहाँ इसमें शामिल एक MustUseReturnValueAttribute

[MustUseReturnValue("Use the return value to...")] 
public byte Foo() 
{  
} 

रूप @Kirk Woll टिप्पणी में कहा, यह भी संभव है एक कस्टम Roslyn Analyzer

+1

इसी तरह पोस्ट करने वाला था, लेकिन इसका परीक्षण किया और [यह काम करता है] (http://i.stack.imgur.com/EY7nt.png) जैसा कि वर्णन किया गया है। (मैंने '[शुद्ध] वापसी 'के बजाय' [शुद्ध] 'का उपयोग किया, लेकिन मुझे लगता है कि वे वही काम करते हैं) –

+2

' [शुद्ध]' और '[MustUseReturnValue]' प्रभाव में बहुत समान हैं। '[MustUseReturnValue] 'एक कस्टम संदेश निर्दिष्ट करने की अनुमति देता है, लेकिन इसके अलावा, मुख्य अंतर अर्थपूर्ण है। '[शुद्ध] 'का अर्थ है कि विधि वस्तु की स्थिति में कोई बदलाव नहीं करती है (इसलिए इसे कॉल करने का एकमात्र कारण वापसी मूल्य है)। '[MustUseReturnValue] 'का भी अर्थ है कि वापसी मूल्य महत्वपूर्ण है और इसका उपयोग किया जाना चाहिए, लेकिन वस्तु की स्थिति के बारे में कोई गारंटी नहीं है। – citizenmatt

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

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