ca1027: وضع علامة تتضمن التعدادات مع FlagsAttribute
TypeName |
MarkEnumsWithFlags |
CheckId |
ca1027 |
Category |
Microsoft.تصميم |
تعطيل تغيير |
غير فاصلة |
السبب
قيم التعداد العام قوي من الثاني أو تركيبة من القيم الأخرى المعرفة في التعداد و System.FlagsAttributeسمة هو غير موجودة. إلى تصغير خطأ positives، لا يعلم هذه قاعدة انتهاكا للتعدادات بقيم القريبة.
وصف القاعدة
قائمة تعداد هو نوع القيمة التي تعرف التعيين مرتبطة باسم الثوابت. يطبق FlagsAttributeإلى قائمة تعداد عندما به ثوابت مسماة يمكن meaningfully دمج. على سبيل المثال، ضع في الاعتبار قائمة تعداد من أيام أسبوع في أحد تطبيقات التي يحتفظ تعقب للأيام التي تتوفر موارد. إذا توفر المورد كل هو ترميز باستخدام التعداد مع FlagsAttributeيمكن تمثيل موجودة، أو أي تركيبة من الأيام. بدون السمة، فقط يمكن تمثيل يوم واحد من أسبوع.
بالنسبة للحقول التي تقوم بتخزين التعدادات combinable، تتم معاملة القيم الفردية بتعداد كـ مجموعات بتات ضمن الحقل. ولذلك، مثل الحقول في بعض الأحيان يشار إلى كـ حقول بت . إلى يجمع قيم التعداد sإلىrage في حقل بت، استخدم operaإلىrs الشرطي المنطقية. لاختبار حقل بت لتقرر ما إذا كانت القيمة القائمة تعداد معينة هو موجودة، استخدم عوامل تشغيل المنطقية منطقية. بالنسبة لحقل بت إلى sإلىre واسترداد بضم قيم التعداد بشكل صحيح، يجب أن تكون كل القيمة في التعداد طاقة من الثاني. إلا إذا كان ترتيب هو هو، العوامل المنطقية منطقية لن تكون قادراً على يفك الضغط قيم التعداد الفردية المخزنة في الحقل.
كيف إلى الإصلاح انتهاكات
إلى إصلاح انتهاكا لهذه قاعدة، قم بإضافة FlagsAttributeإلى التعداد.
عند إلى منع التحذيرات
منع ظهور تحذير من هذه قاعدة إذا كنت لا تريد قيم التعداد إلى أن combinable.
مثال
في المثال التالي، DaysEnumNeedsFlagsهو قائمة تعداد تتوافق مع متطلبات استخدام FlagsAttribute، ولكن لم يكن it. ColorEnumShouldNotHaveFlagالتعداد لم يكن قيم التي لها قوي من الثاني، ولكن يحدد بشكل غير صحيح FlagsAttribute. هذا انتهاك قاعدة ca2217: لا تضع علامة تعدادات مع FlagsAttribute.
using System;
namespace DesignLibrary
{
// Violates rule: MarkEnumsWithFlags.
public enum DaysEnumNeedsFlags
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday| Tuesday | Wednesday | Thursday | Friday
}
// Violates rule: DoNotMarkEnumsWithFlags.
[FlagsAttribute]
public enum ColorEnumShouldNotHaveFlag
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
}
القواعد ذات الصلة
ca2217: لا تضع علامة تعدادات مع FlagsAttribute