मैं कोड के एक पुराने टुकड़ा में इस तरह की एक enum मिल गया है:संकलन समय uint के रूपांतरण में int करने के लिए सी #
[Flags]
public enum Example: uint
{
Foo = 0x00000001,
Bar = 0xC0000000
}
अब, FxCop is complaining इस enum के बारे में नहीं बल्कि पूर्णांक के रूप में यह क्षेत्र का समर्थन कर रहा है की तुलना में uint का उपयोग कर। (और मुझे इस कोड को FxCop जितना संभव हो सके साफ़ करने के साथ काम किया गया है ...) लेकिन एक मौजूदा enum मान है जो enum के उच्च क्रम बिट का उपयोग करता है, और मैं इसे बदल नहीं सकता क्योंकि यह जारी रहा है ऑन-डिस्क प्रारूप। जब मैं इस संकलन करने का प्रयास करें, सी # संकलक ठीक ही शिकायत:
error CS0266: Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)
तो, मैं इस के बजाय करने के लिए इसे बदलने के लिए जा रहा था:
[Flags]
public enum Example
{
Foo = 0x00000001,
Bar = (int)0xC0000000
}
हालांकि, मैं सकारात्मक है कि मैं भरोसा कर सकते हैं नहीं कर रहा हूँ इस पर अंकगणितीय अपवाद फेंक नहीं, या डिस्क पर पढ़ने या लिखे जाने पर सही ढंग से संभाला नहीं जा रहा है। क्या मैं यहां प्रारूप के मिलान से थोड़ा सा प्रारूप पर भरोसा कर सकता हूं, जब एनम को एक हस्ताक्षरित int द्वारा समर्थित किया गया था?
यह आपकी सभी FxCop समस्याओं को हल नहीं कर सकता है। मुझे आश्चर्य नहीं होगा अगर उसने आपको बताया कि आपके पास सभी 'ध्वज]' enums के लिए 'कोई नहीं' सदस्य होना चाहिए। यह एक इनलाइन चेतावनी दमन के लिए एक बहुत अच्छी जगह की तरह लगता है कि आप कोड क्यों नहीं बदल सकते हैं। –
@ कोडी: हाँ, मैं ऐसा कर सकता हूं। –