मैं कोड है कि मुझे VS2015 में एक चेतावनी संदेश (CS0675) देने की एक पंक्ति है पर ऑपरेटर, लेकिन 2013.कंपाइलर या गलतफहमी में बग? या शॉर्ट्स
shortValue |= (short)anEnum;
चेतावनी CS0675 बिटवाइस-या ऑपरेटर में नहीं एक sign- पर इस्तेमाल किया विस्तारित ऑपरेंड; पहले एक छोटे से हस्ताक्षरित प्रकार को कास्टिंग करने पर विचार करें। कंपाइलर स्पष्ट रूप से विस्तृत और एक चर को बढ़ाया गया, और उसके बाद परिणामी मान को थोड़ा सा या ऑपरेशन में उपयोग किया गया। इसका परिणाम अप्रत्याशित व्यवहार हो सकता है।
जाहिर है कि क्या हो रहा है enum और छोटा एक int, या ऑपरेटर को बढ़ाया जा रहा है, और उसके परिणामस्वरूप परिणाम को कम से कम सौंपा गया।
यदि मैं shortValue = shortValue | (short)anEnum;
पर कोड बदलता हूं तो मुझे एक संकलक त्रुटि CS0266 मिलती है। लेकिन थोड़ा सा या शॉर्ट्स के लिए मान्य होना चाहिए (दोनों मामलों में मुझे विश्वास है)। यदि मैं |
पर माउस को घुमाता हूं तो यह एक इंट ऑपरेटर के रूप में दिखाता है, क्या मुझे कुछ याद आ रहा है या क्या मुझे इसे बग के रूप में रिपोर्ट करना चाहिए?
पीएस: मुझे पता है कि |=
के बजाय =
का उपयोग कर चेतावनी/त्रुटि को समाप्त कर सकते हैं और परिणाम को संक्षिप्त में कास्ट कर सकते हैं।
यह भी देखें [बिट स्टूडियो 2015 में साइन-विस्तारित ऑपरेंड पर उपयोग किए गए ऑपरेटर/या ऑपरेटर] (http://stackoverflow.com/questions/31542256/) और अन्य थ्रेड। –
यह वीएस2015 में एक बग है और इसे VS2015 अपडेट 1 में ठीक किया जाएगा। Https://github.com/dotnet/roslyn/issues/4027 देखें। –