2012-03-15 10 views
5

सी # में जब मैं कहता हूँ:क्यों सी # 0 int के रूप में व्यवहार करता है और छोटा/दशमलव आदि के रूप में नहीं?

var s = 0; 

क्या s के प्रकार किया जाना चाहिए? यह int32 बनाता है। तो varshort और अन्य (?) जैसे प्रकारों के लिए प्रयोग योग्य नहीं है।

+0

एड्रियन, यह एक बिंदु है जो कल्पना में काफी अच्छी तरह से समझाया गया है। – Joey

+0

लगता है कि शॉर्ट के लिए कोई शाब्दिक नहीं है :( – Dhananjay

उत्तर

3

विनिर्देश से (§ 2.4.4.2):

शाब्दिक कोई प्रत्यय है, यह इन प्रकार जिसमें अपने मूल्य दर्शाया जा सकता है की पहली है: int, uint, long, ulong

तो छोटे प्रकार स्वचालित रूप से अनुमानित नहीं होते हैं। तुम एक डाली इस तरह के एक छोटे प्रकार के लिए मजबूर करने जोड़ सकते हैं:

var s = (short)0; 
+0

तो यह छोटा एस = 0 लिखने के लिए अच्छा है; कम से कम यह छोटा संस्करण है। – Dhananjay

+0

हां, आप कर सकते हैं। लेकिन आप शायद पहले जानते थे। मुझे यह धारणा मिली कि आपका भ्रम क्यों है संकलक '0' को स्वचालित रूप से कम से कम नहीं मानेंगे। – Joey

2

सी # संकलक प्रकार infers Int32 किया जाना है। और आप इसे short या byte पर स्पष्ट रूप से नहीं डाल सकते हैं क्योंकि वे आकार में छोटे हैं और आप डेटा खो सकते हैं।

आप decimal अनुमान लगाने के लिए संकलक चाहते हैं, तो आप कर सकते हैं:

var s = 0M; 
5

सी # भाषा मानक के अनुसार, विशेष रूप से §2.4.4.2 on integer literals:

एक पूर्णांक शाब्दिक के प्रकार के रूप में निम्न प्रकार निर्धारित किया जाता है :

  • यदि शाब्दिक में कोई प्रत्यय नहीं है, तो इसमें इन प्रकारों में से पहला है जिसमें इसका मूल्य पुनर्निर्मित किया जा सकता है टेड: int, uint, long, ulong
  • यदि शाब्दिक U या u द्वारा प्रत्ययित है, तो इसमें इन प्रकारों में से पहला है जिसमें इसका मूल्य प्रदर्शित किया जा सकता है: uint, ulong
  • यदि शाब्दिक L या l द्वारा प्रत्ययित है, तो इसमें इन प्रकारों में से पहला है जिसमें इसका मान प्रदर्शित किया जा सकता है: long, ulong
  • शाब्दिक द्वारा प्रत्यय है, तो UL, Ul, uL, ul, LU, Lu, lU, या lu, यह प्रकार ulong की है।

पहला नियम सभी को यहां लागू करने की आवश्यकता है। शाब्दिक 0 में कोई प्रत्यय नहीं है और इसे int (या, बीसीएल शर्तों, Int32 में) के रूप में प्रदर्शित किया जा सकता है, इसलिए यह उस प्रकार का है।

जैसा कि आप ऊपर से अनुमान लगा सकते हैं, एक शाब्दिक प्रकार के प्रकार को बदलने के लिए, आप इसके लिए एक प्रत्यय जोड़ सकते हैं। उदाहरण के लिए, शाब्दिक 0uuint प्रकार का होगा।वैकल्पिक रूप से, आप स्पष्ट रूप से शाब्दिक रूप से एक अलग प्रकार के लिए कास्ट कर सकते हैं; उदाहरण के लिए: (short)0 संकलक को शाब्दिक रूप से short के रूप में व्यवहार करने का कारण बनता है।

5

इस पोस्ट को here पर StackOverflow पर देखें।

आप सभी संख्याओं के लिए एक पोस्टफिक्स निर्दिष्ट कर सकते हैं।

var i = 0; 
var d = 0d; 
var f = 0f; 
var l = 0L; 
var m = 0m; 
संबंधित मुद्दे