c# لماذا لا يعتبر Count عددًا صحيحًا غير موقَّع؟




.net (4)

التكرارات المحتملة:
لماذا يستخدم .NET int بدلاً من uint في فئات معينة؟
لماذا Array.Length int ، وليس uint

أتساءل دائمًا لماذا .Count ليس عددًا صحيحًا غير موقَّع بدلاً من رقم موقع؟

على سبيل المثال ، خذ ListView.SelectedItems.Count . لا يمكن أن يكون عدد العناصر أقل من 0 ، إذن لماذا هو int موقعة؟

إذا حاولت اختبار ما إذا كانت هناك عناصر محددة ، فإنني أرغب في الاختبار

 if (ListView.SelectedItems.Count == 0) {}

ولكن لأنه عدد صحيح موقعة ، لا بد لي من اختبار

 if (ListView.SelectedItems.Count <= 0) {}

أم أن هناك أي حالة عندما يكون عدد. <0؟


Answer #1
  1. إنها ليست متوافقة مع CLS ، إلى حد كبير للسماح بدعم أوسع من لغات مختلفة.

  2. تقدم كثافة العمليات الموقعة سهولة في رمز الكود من C أو C ++ الذي يستخدم حساب المؤشر.

  3. يمكن أن يكون Count جزءًا من تعبير حيث يمكن أن تكون القيمة الإجمالية سالبة. على وجه الخصوص ، يحتوي count على علاقة مباشرة بالمؤشرات ، حيث تكون المؤشرات الصحيحة دائمًا في النطاق [0 ، Count - 1] ، ولكن يتم استخدام النتائج السلبية على سبيل المثال من خلال بعض طرق البحث الثنائية (بما في ذلك تلك التي توفرها BCL) لتعكس الموضع حيث يجب إدراج عنصر جديد للحفاظ على النظام.


Answer #2

Mabye لأن نوع بيانات uint ليس جزءًا من CLS (مواصفات اللغة العامة) حيث لا تدعمها جميع اللغات .Net.

هنا موضوع مشابه جدا حول المصفوفات:

لماذا Array.Length int ، وليس uint



Answer #4

دعونا ننظر إلى هذا من زاوية عملية.

للأفضل أو الأسوأ ، تعتبر int الموقعة هي النوع العادي من int قيد الاستخدام في .NET. كان من الطبيعي أيضًا استخدام int الموقعة في C و C ++. لذلك ، يتم الإعلان عن معظم المتغيرات لتكون int بدلاً من غير الموقعة ما لم يكن هناك سبب وجيه خلاف ذلك.

التحويل بين int غير الموقعة و int الموقعة له مشكلات وهو غير آمن دائمًا.

في نظام 32 بت ، لا يمكن أن تحتوي المجموعة في أي مكان على مقربة من 2 ^ ^ 32 عنصرًا فيه ، لذلك int الموقعة كبيرة بما يكفي في جميع الحالات .

في نظام 64 بت ، لا يكسبك int غير الموقّع كثيرًا ، وفي معظم الحالات لا تزال int الموقعة كبيرة بما يكفي ، وإلا فإنك تحتاج إلى استخدام int 64 بت. (أتوقع ألا يتعامل أي من المجموعة القياسية جيدًا مع أي مكان بالقرب من 2 ^ ^ 31 عنصرًا على نظام 64!)

لذلك بالنظر إلى أن استخدام int غير الموقّع ليس له ميزة واضحة ، فلماذا تستخدم int غير الموقّع؟







.net