यह मेरे लिए बेहद अजीब लगता है कि Stream.Writeint
का उपयोग करता है, UInt
के बजाय ... क्या इस तथ्य के लिए "विरासत" कोड के अलावा कोई स्पष्टीकरण है? किसी भी एक -1
बाइट्स लिखना चाहते हैं?!?क्यों Stream.Write नहीं एक uint लेती है?
उत्तर
बिना हस्ताक्षर किए गए प्रकार सीएलएस-अनुरूप नहीं हैं, इसलिए Stream.Write
ऑफसेट और गिनती के लिए uint
का उपयोग नहीं करता है।
देखें: uint (C# Reference)
uint प्रकार सीएलएस अनुरूप नहीं है। जब भी संभव हो int का प्रयोग करें।
लेकिन वहाँ एक मुद्दा यह है कि आ रहा रखता है: यही कारण है कि बताते हैं Why we don't have unsigned types in the CLS by Brad Abrams (2 Sep 2003):
एक पुराने लेख नहीं है क्यों हम अनुमति नहीं दी में अहस्ताक्षरित प्रकार (UInt32 और की तरह) सीएलएस?
ठीक है, इस प्रश्न के लिए वास्तव में दो उत्तर हैं। पहले स्तर पर कुछ भाषाओं (जैसे VB.NET के रूप में) अहस्ताक्षरित प्रकार के लिए पूरा समर्थन नहीं करते हैं। उदाहरण के लिए आप में VB.NET ... अहस्ताक्षरित शाब्दिक नहीं हो सकता। लेकिन निष्पक्ष होना करने के लिए कि एक पूरी तरह से संतोषजनक जवाब क्योंकि जब हम सीएलएस शुरू कर दिया तो आप या तो VB.NET में उपवर्ग नहीं कर सकता है नहीं है, लेकिन हम उस भाषा क्या हम लोग चाहेगा पता था कि समर्थन करने के लिए बढ़ाया। हम हस्ताक्षर किए गए प्रकारों के साथ एक ही काम कर सकते थे। लेकिन हम ऐसा नहीं किया। क्यों नहीं? खैर, यह एक गहरा कारण हो जाता है। वास्तव में इसी कारण से सी # भाषा के प्रारंभिक बीटा बिना हस्ताक्षर किए गए प्रकार (कोई यूहॉर्ट, यूंट और इसी तरह) का समर्थन नहीं करते थे।
हम में से कई लोगों के बीच सामान्य भावना यह है कि प्रोग्रामिंग का विशाल बहुमत हस्ताक्षरित प्रकारों के साथ किया जाता है। जब भी आप हस्ताक्षरित प्रकारों पर स्विच करते हैं तो आप मानसिक मॉडल स्विच (और एक बदसूरत कास्ट) को मजबूर करते हैं। सबसे खराब कलाकारों में आप एपीआई की पूरी समांतर दुनिया बनाते हैं जो बिना हस्ताक्षर किए गए प्रकार लेते हैं। "< 0" से बचने के लिए मान सीएलएस में जेनरिक के समावेशन के लायक नहीं है।
(नोट VB.Net (वीबी 8 बाद) के नए संस्करण अहस्ताक्षरित प्रकार का समर्थन करता है कि)।
[System.Security.SecuritySafeCritical] // auto-generated
public override void Write(byte[] array, int offset, int count) {
if (array==null)
throw new ArgumentNullException("array", Environment.GetResourceString("ArgumentNull_Buffer"));
if (offset < 0)
throw new ArgumentOutOfRangeException("offset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
if (count < 0)
throw new ArgumentOutOfRangeException("count", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
if (array.Length - offset < count)
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
uint प्रकार सीएलएस अनुरूप नहीं है से:
एक बात (शायद असंबंधित) जोड़ने के लिए अधिक,
Stream.Write
implementation ऋणात्मक मानों के लिए चेक है। जब भी संभव हो int का प्रयोग करें।
तो Stream.Write
ऑफ़सेट और गिनती के लिए int का उपयोग करता है।
reasons given by ShuggyCoUk इसे और अधिक स्पष्ट करता है:
- uint सीएलएस अनुरूप नहीं है, इस प्रकार यह पर एक में प्रकार (सरणी) का निर्माण निर्भर समस्याग्रस्त हो गया होता
- के रूप में क्रम मूल डिजाइन 2 जीबी मेमोरी की तुलना में पर कब्जा कर रहे ढेर पर किसी ऑब्जेक्ट को प्रतिबंधित करता है। चूंकि अधिकतम आकार वाली सरणी जो से कम या इस सीमा के बराबर होगी, नया बाइट [int.MaxValue] होगा सकारात्मक और अवैध सरणी लंबाई उत्पन्न करने में सक्षम होने के लिए लोगों को परेशान करेगा।
- ध्यान दें कि यह सीमा somewhat removed in the 4.5 release, है, हालांकि मानक लंबाई int int के रूप में है।
- ऐतिहासिक रूप से सी # विरासत सी और सी ++ से इसके अधिकांश वाक्यविन्यास और सम्मेलन को प्राप्त करता है। उन सरणी में बस पॉइंटर अंकगणित है इसलिए नकारात्मक सरणी अनुक्रमण संभव था (हालांकि सामान्य रूप से अवैध और खतरनाक)। चूंकि बहुत मौजूदा कोड मानता है कि सरणी सूचकांक ऋणात्मक है यह
- संबंधित नोट पर सी/सी ++ में सरणी अनुक्रमणिका के लिए हस्ताक्षरित पूर्णांक का उपयोग करने का अर्थ है कि इन भाषाओं और अप्रबंधित कार्यों के साथ इंटरऑप की आवश्यकता होगी वैसे भी उन परिस्थितियों में चींटियों का उपयोग, जो असंगतता के कारण भ्रमित हो सकता है।
- BinarySearch कार्यान्वयन (कई एल्गोरिदम का एक बहुत ही उपयोगी घटक) में सक्षम होने पर निर्भर करता है को पूर्णांक के नकारात्मक श्रेणी का उपयोग कि मूल्य और स्थान नहीं मिला था, जिस पर इस तरह के एक मूल्य होना चाहिए इंगित करने के लिए को सॉर्टिंग बनाए रखें।
- किसी सरणी पर परिचालन करते समय यह संभावना है कि आप किसी मौजूदा अनुक्रमणिका का ऋणात्मक ऑफ़सेट लेना चाहते हैं। यदि आपने का उपयोग ऑफ़सेट किया है जो आपको इकाई का उपयोग करके सरणी की शुरुआत से पहले ले जाएगा, तो व्यवहार के आसपास लपेटने से आपकी अनुक्रमणिका संभवतः कानूनी (उसमें यह सकारात्मक है)। एक पूर्णांक के साथ परिणाम (के बाद से क्रम अमान्य स्मृति पढ़ने से बचाव होगा, लेकिन सुरक्षित) अवैध होगा
मानो या न मानो, अहस्ताक्षरित पूर्णांकों not part of the Common Language Specification (CLS) हैं।
uint प्रकार सीएलएस अनुरूप नहीं है। जब भी संभव हो int का प्रयोग करें।
इस प्रकार माइक्रोसॉफ्ट सीएलएस-compliancy के हित में यहां के बजाय uint
int
इस्तेमाल किया।
- 1. [] uint को uint * कनवर्ट नहीं कर सकता
- 2. भविष्य की पुनर्प्राप्ति अपवाद क्यों नहीं लेती?
- 3. क्यों System.nanoTime() लेती है 4400 नैनो सेकंड
- 4. क्यों रेडियोबुटटन सूची हमेशा एक नई पंक्ति लेती है?
- 5. std :: fstream कक्षाएं std :: string क्यों नहीं लेती हैं?
- 6. दो 'uint'
- 7. uint है कड़ाई से सकारात्मक
- 8. अंतिम प्लेटफ़ॉर्म-विशिष्ट निर्भरता कार्गो में प्राथमिकता क्यों लेती है?
- 9. कैसे पूर्णांक uint को
- 10. MySQL में सरल अद्यतन क्वेरी एक लंबा समय लेती है
- 11. स्विफ्ट uint और इंट
- 12. परिवर्तित पूरे बाइट [] uint
- 13. मेरी रूट व्यू की ऊंचाई इसकी नेविगेशन बार का कारण क्यों नहीं लेती है?
- 14. स्ट्रिंगलाइथ विशेषता त्रुटिपूर्णता क्या पैरामीटर लेती है?
- 15. स्विफ्ट परिवर्तित uint Int को
- 16. C++ uint, अहस्ताक्षरित int, इंट
- 17. एक विधि क्यों नहीं है?
- 18. typedef'd uint का उपयोग त्रुटि का कारण बनता है, जबकि "हस्ताक्षरित int" नहीं है ...?
- 19. सिस्टम.Net.Http.HttpMethod एक कक्षा क्यों नहीं है, एक enum नहीं है?
- 20. क्यों एसटीएल ifstream और ऑफस्ट्रीम कक्षाएं std :: स्ट्रिंग फ़ाइल नाम के रूप में नहीं लेती हैं?
- 21. बनाने के लिए Stream.Write() UTF-8 प्रारूप में उत्पादन
- 22. अनबॉक्सिंग uint/जानने क्या बॉक्स के अंदर है बिना पूर्णांक
- 23. एएसपी.NET रूटिंग वेब.कॉन्फिग एचटीपी हैंडलर सेक्शन पर सटीकता क्यों लेती है?
- 24. क्यों 500 एमबी रेडिस dump.rdb फ़ाइल 5.0 जीबी मेमोरी लेती है?
- 25. uint और पूर्णांक और निरंतर तह
- 26. पायथन में क्रमबद्ध सूची में खोज क्यों अधिक समय लेती है?
- 27. एकल उद्धृत स्ट्रिंग सी # में uint को
- 28. मैटलैब डीएलएल को पहली कॉल क्यों अगली कॉल से ज्यादा समय लेती है?
- 29. पर्ल बैकट्रैकिंग मैच विफलता मैच सफलता की तुलना में कम समय क्यों लेती है?
- 30. BufferedStream.Write क्यों फेंक देगा "यह स्ट्रीम तलाश संचालन का समर्थन नहीं करती है"?