سؤال

هل تعدادات C# آمنة؟

إذا لم يكن الأمر كذلك، ما هي الآثار المترتبة؟

هل كانت مفيدة؟

المحلول

لإعطاء إجابة مختلفة بعض الشيء ... في حين أن القيم هي نوع آمن من وجهة نظر الصب، وأنها لا تزال دون رادع بعد أن يكونوا قد تم الإدلاء - أي بمعنى

enum Foo { A = 1, B = 2, C = 3 }    
static void Main()
{
    Foo foo = (Foo)500; // works fine
    Console.WriteLine(foo); // also fine - shows 500
}

لهذا السبب، يجب أن تأخذ الرعاية للتحقق من القيم - على سبيل المثال مع default في switch يطرح استثناء

<الإضراب> يمكنك أيضا التحقق من (قيم غير [Flags]) عن طريق:

<الإضراب>
bool isValid = Enum.IsDefined(typeof(Foo), foo);

<الإضراب>

نصائح أخرى

ونعم هم.

وفيما يلي من http://www.csharp-station.com/Tutorials /Lesson17.aspx

يتم كتابتها

وتتضمن التعدادات بقوة الثوابت. هم أساسا الأنواع الفريدة التي تسمح لك لتعيين أسماء رمزية لالقيم لا تتجزأ. في C # التقليد، وكتابتها بقوة، وهذا يعني أن تعداد من نوع واحد ولا يجوز التنازل ضمنا إلى التعداد من نوع آخر على الرغم من أن القيمة الأساسية لأعضائها هي نفسها. وعلى نفس المنوال، وأنواع متكاملة وتتضمن التعدادات ليست interchangable ضمنا. وتتطلب جميع المهام بين أنواع التعداد المختلفة وأنواع لا يتجزأ يلقي صريح.

بالنسبة لأولئك الذين يقترحون استخدام Enum.IsDefined للقيام بالتحقق من صحة الوسيطة...لا تفعل ذلك!لكل براد أبرامز (من تحديث إرشادات تصميم الإطار على تصميم التعداد):

توجد بالفعل مشكلتان في Enum.IsDefined().يقوم أولاً بتحميل الانعكاس ومجموعة من البيانات الوصفية من النوع البارد مما يجعلها مكالمة باهظة الثمن بشكل خادع.ثانيًا، كما تشير الملاحظة إلى وجود مشكلة في الإصدار هنا.

نعم هم .

<اقتباس فقرة>   يتم كتابتها

وتتضمن التعدادات بقوة الثوابت.   وهي الأنواع الفريدة أساسا أن   تسمح لك لتعيين أسماء رمزية ل   القيم لا تتجزأ. في C # التقليد،   يتم كتابتها بقوة أنها، وهذا يعني أن   والتعداد من نوع واحد قد لا تكون   تعيين ضمنيا إلى التعداد من   نوع آخر على الرغم من أن   القيمة الأساسية من أعضائها هم   نفس الشيء. وعلى نفس المنوال،   أنواع متكاملة وتتضمن التعدادات ليست   interchangable ضمنا. الكل   المهام بين مختلف التعداد   أنواع وأنواع متكاملة تتطلب   يلقي صريح.

نعم.

وC #: أنواع التعداد:

و-A من نوع آمن تعداد القيم اسمه.

و-Prevents أخطاء البرمجة

و-user يمكن السيطرة نوع الأساسي (الافتراضي دولية)

و-Also يمكن السيطرة على القيم الأساسية

ومن الناحية الفنية لا لأنك يمكن أن يمثل التعداد كقيمة قاعدتها (الباحث، منذ فترة طويلة، الخ). ومع ذلك، إذا تأكد من أنك تستخدم فقط في تعداد أسماء في المقدمة، سوف تتلقى أخطاء الترجمة وقت إذا قمت بتغيير اسم من القيمة المذكورة دون تحديث المراجع لها. وفي هذا الصدد نعم هو نوع آمنة.

وأنا في وقت متأخر إلى الحزب هنا، ولكن أردت أن طرد شيئا قليلا اضافية ... تحديث لفي . NET من كرزيسستوف كوالينا. بالإضافة إلى معلومات سرية ممتازة فوق على التدقيق لضمان قيمة صالحة يتم تمريرها إلى تتضمن التعدادات، وهذا يوفر التوجيه والمشورة أخرى لكيفية استخدامها بشكل فعال، وحفنة من gotchas (خاصة تتضمن التعدادات Flags المعنية)، الخ.

ونعم انهم ص كتابة بشدة صفد ش لا يمكن أنها لا تفعل التحويل impilcit من التعداد المتغيرات المستمرة لقيمة integeral ش جهد عالي 2 expilcitly القيام دات على سبيل المثال أيام التعداد { شمس، مون } الباحث ه = (الباحث) days.sun. console.writeline (ه)؛

تعدادات C# هي معنى آمن للكتابة

  1. لا يمكنك التحويل ضمنيًا من النوع الأساسي إلى التعداد الفعلي
  2. أيضًا، لا يمكنك تعيين قيمة تعداد واحد إلى تعداد آخر، على الرغم من أن الأنواع الأساسية لكلا التعدادين متماثلة.مطلوب دائمًا طاقم تمثيل واضح.
  3. تجعل التعدادات التعليمات البرمجية الخاصة بك أكثر قابلية للقراءة وأكثر قابلية للصيانة.

لقد صادفت مقطع فيديو تعليميًا ممتازًا حول التعدادات يشرح طبيعتها الآمنة.الق نظرة هنا و هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top