आम तौर पर, आपको हमेशा अपने डेटा के लिए सबसे विशिष्ट डेटा प्रकार का उपयोग करना चाहिए।
यदि, उदाहरण के लिए, आप डेटाबेस से डेटा खींचने के लिए एंटिटी फ्रेमवर्क का उपयोग कर रहे हैं, तो EF डेटाबेस में उपयोग किए जाने वाले डेटा के निकटतम डेटा प्रकार का उपयोग करेगा।
C # में इसके साथ दो समस्याएं हैं।
सबसे पहले, अधिकांश सी # डेवलपर्स int
पूरे नंबर का प्रतिनिधित्व करने के लिए (जब तक उपयोग करने का कोई कारण नहीं है long
) का उपयोग करते हैं । इसका मतलब है कि अन्य डेवलपर्स डेटा प्रकार की जांच करने के लिए नहीं सोचेंगे, इसलिए उन्हें ऊपर उल्लिखित त्रुटियां मिलेंगी। दूसरा, और अधिक महत्वपूर्ण मुद्दा है, / था कि नेट के मूल अंकगणितीय ऑपरेटर केवल समर्थित int
, uint
, long
, ulong
, float
, डबल, और decimal
*। यह आज भी मामला है ( सी # 5.0 भाषा कल्पना में खंड 7.8.4 देखें )। आप निम्न कोड का उपयोग करके स्वयं इसका परीक्षण कर सकते हैं:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
हमारे byte
- byte
का परिणाम एक int
( System.Int32
) है।
इन दो मुद्दों ने "केवल संपूर्ण संख्याओं के लिए int का उपयोग करें" अभ्यास को जन्म दिया, जो इतना आम है।
तो अपने प्रश्न का उत्तर देने के लिए, C # में आमतौर पर एक अच्छा विचार है int
जब तक कि आप छड़ी न करें:
- एक स्वचालित कोड जनरेटर ने एक अलग मूल्य (जैसे एंटिटी फ्रेमवर्क) का उपयोग किया।
- परियोजना के अन्य सभी डेवलपर्स इस बात से अवगत हैं कि आप कम सामान्य डेटा प्रकारों का उपयोग कर रहे हैं (इसमें एक टिप्पणी इंगित करता है कि आपने डेटा प्रकार और क्यों उपयोग किया है)।
- कम आम डेटा प्रकार आमतौर पर परियोजना में पहले से ही उपयोग किए जाते हैं।
- कार्यक्रम कम आम डेटा प्रकार के लाभों की आवश्यकता है (यदि आप इन आप रैम में रखने की जरूरत 100 मिलियन है, तो एक के बीच का अंतर
byte
और एक int
या एक int
और एक long
महत्वपूर्ण है, या अहस्ताक्षरित की अंकगणित मतभेद पहले ही उल्लेख किया)।
यदि आपको डेटा पर गणित करने की आवश्यकता है, तो सामान्य प्रकारों से चिपके रहें।
याद रखें, आप एक प्रकार से दूसरे में डाल सकते हैं। यह सीपीयू स्टैंड बिंदु से कम कुशल हो सकता है, इसलिए आप शायद 7 सामान्य प्रकारों में से एक के साथ बेहतर हैं, लेकिन यदि आवश्यक हो तो यह एक विकल्प है।
Enumerations ( enum
) उपरोक्त दिशानिर्देशों में से एक मेरा व्यक्तिगत अपवाद है। यदि मेरे पास कुछ ही विकल्प हैं, तो मैं enum को बाइट या शॉर्ट बनाने के लिए निर्दिष्ट करूँगा । यदि मुझे ध्वजांकित एनम में अंतिम बिट की आवश्यकता है, uint
तो मैं इस प्रकार को निर्दिष्ट करूंगा ताकि मैं ध्वज के लिए मान सेट करने के लिए हेक्स का उपयोग कर सकूं।
यदि आप किसी संपत्ति का उपयोग मूल्य प्रतिबंधक कोड के साथ करते हैं, तो सारांश टैग में स्पष्ट करना सुनिश्चित करें कि क्या प्रतिबंध हैं और क्यों।
* C # उपनाम का उपयोग .NET नाम के बजाय किया जाता है System.Int32
क्योंकि यह C # प्रश्न है।
नोट: .NET डेवलपर्स (जो मुझे नहीं मिल सकता है) से एक ब्लॉग या लेख था, जिसने अंकगणितीय कार्यों की सीमित संख्या और कुछ कारणों के बारे में बताया कि वे इसके बारे में चिंता क्यों नहीं करते थे। जैसा कि मुझे याद है, उन्होंने संकेत दिया कि उनके पास अन्य डेटा प्रकारों के लिए समर्थन जोड़ने की कोई योजना नहीं है।
नोट: जावा अहस्ताक्षरित डेटा प्रकारों का समर्थन नहीं करता है और पहले 8 या 16 बिट पूरे संख्याओं के लिए कोई समर्थन नहीं था। चूँकि कई C # डेवलपर्स जावा बैकग्राउंड से आए थे या दोनों भाषाओं में काम करने की जरूरत थी, इसलिए कभी-कभी एक भाषा की सीमाएं कृत्रिम रूप से दूसरे पर थोप दी जाती।