مشاركة عبر


ca1008: يجب أن يحتوي تعدادات على قيم صفرية

TypeName

EnumsShouldHaveZeroValue

CheckId

ca1008

Category

Microsoft.تصميم

تعطيل تغيير

غير مخالفة-في حالة مطالبتك بإضافة القيمة بلا إلى قائمة تعداد.Breaking غير علامة-إذا تم مطالبتك بإعادة تسمية أو إزالة أي قيم التعداد.

السبب

لتعداد دون تطبيق System.FlagsAttributeبتعريف عضو ذات القيمة صفر؛ أو لتعداد مع تطبيق FlagsAttributeتعريف عضو بالقيمة الصفر ولكن اسمه هو غير "بلا"، أو تعريف التعداد متعددة valued بصفر الأعضاء.

وصف القاعدة

قيمة افتراضية للتعداد un-initialized، كآخر من أنواع القيمة صفراً. يجب تعريف قائمة تعداد غير ذات علامات سببا عضو ذات القيمة صفر حيث تكون قيمة افتراضية هو قيمة صالحة للقائمة تعداد. إذا كان ذلك مناسباً، قم بتسمية عضو "بلا". وإلا، قم بتعيين صفر للعضو الأكثر استخداماً. لاحظ أنه عند القيمة التعداد العضو أول هو لم يتم تعيينها في التصريح، فإن القيمة هو صفر بشكل افتراضي.

إذا قائمة تعداد يحتوي FlagsAttributeتطبيق تعريف عضو valued على صفر، يجب أن يكون اسمه "بلا" للإشارة إلى أنه لا توجد قيم تم تعيينها قائمة تعداد. استخدام عضو valued بصفر لأي غرض آخر هو contrary استخدم FlagsAttributeفي ذلك AND و أو العوامل bitwهوe دون فائدة مع الأعضاء. وهذا يعني عضو واحد فقط التي يجب أن يتم تعيين القيمة صفر. لاحظ أنه إذا كان هناك عدة الأعضاء مع القيمة صفر في قائمة سببا بعلامات قائمة تعداد، Enum.ToString()إرجاع نتائج غير صحيحة للأعضاء غير الصفر.

كيف إلى الإصلاح انتهاكات

لإصلاح انتهاكا لترتيب هو قاعدة لتعريف عمليات التعداد غير ذات علامات سببا عضو ذات القيمة صفر; th هو هو تغيير غير منقسمة. لعمليات التعداد سببا على علامات تعريف عضو valued على صفر، قم بتسمية th هو عضو "بلا" ثم قم بحذف أي الأعضاء آخرين بقيمة صفر; th هو هو تغيير الفاصلة.

عند إلى منع التحذيرات

لا بمنع تحذير من هذه قاعدة فيما عدا التعدادات سببا بالعلامات التي تم شحنها مسبقاً.

مثال

يظهر المثال التالي الثاني التعدادات التي تنفذ قاعدة و التعداد، BadTraceOptions، التي تخالف قاعدة.

Imports System

Namespace DesignLibrary

   Public Enum TraceLevel
      Off     = 0
      AnError = 1
      Warning = 2
      Info    = 3
      Verbose = 4
   End Enum

   <Flags> _
   Public Enum TraceOptions
      None         =    0
      CallStack    = &H01
      LogicalStack = &H02
      DateTime     = &H04
      Timestamp    = &H08
   End Enum

   <Flags> _
   Public Enum BadTraceOptions
      CallStack    =    0
      LogicalStack = &H01
      DateTime     = &H02
      Timestamp    = &H04
   End Enum

   Class UseBadTraceOptions

      Shared Sub Main()

         ' Set the flags.
         Dim badOptions As BadTraceOptions = _
            BadTraceOptions.LogicalStack Or BadTraceOptions.Timestamp

         ' Check whether CallStack is set.
         If((badOptions And BadTraceOptions.CallStack) = _
             BadTraceOptions.CallStack)
            ' This 'If' statement is always true.
         End If

      End Sub

   End Class

End Namespace
using System;

namespace DesignLibrary
{
   public enum TraceLevel
   {
      Off     = 0,
      Error   = 1,
      Warning = 2,
      Info    = 3,
      Verbose = 4
   }

   [Flags]
   public enum TraceOptions
   {
      None         =    0,
      CallStack    = 0x01,
      LogicalStack = 0x02,
      DateTime     = 0x04,
      Timestamp    = 0x08,
   }

   [Flags]
   public enum BadTraceOptions
   {
      CallStack    =    0,
      LogicalStack = 0x01,
      DateTime     = 0x02,
      Timestamp    = 0x04,
   }

   class UseBadTraceOptions
   {
      static void Main()
      {
         // Set the flags.
         BadTraceOptions badOptions = 
            BadTraceOptions.LogicalStack | BadTraceOptions.Timestamp;

         // Check whether CallStack is set.
         if((badOptions & BadTraceOptions.CallStack) == 
             BadTraceOptions.CallStack)
         {
            // This 'if' statement is always true.
         }
      }
   }
}
using namespace System;

namespace DesignLibrary
{
   public enum class TraceLevel
   {
      Off     = 0,
      Error   = 1,
      Warning = 2,
      Info    = 3,
      Verbose = 4
   };

   [Flags]
   public enum class TraceOptions
   {
      None         =    0,
      CallStack    = 0x01,
      LogicalStack = 0x02,
      DateTime     = 0x04,
      Timestamp    = 0x08
   };

   [Flags]
   public enum class BadTraceOptions
   {
      CallStack    =    0,
      LogicalStack = 0x01,
      DateTime     = 0x02,
      Timestamp    = 0x04
   };
}

using namespace DesignLibrary;

void main()
{
   // Set the flags.
   BadTraceOptions badOptions = safe_cast<BadTraceOptions> 
      (BadTraceOptions::LogicalStack | BadTraceOptions::Timestamp);

   // Check whether CallStack is set.
   if((badOptions & BadTraceOptions::CallStack) == 
         BadTraceOptions::CallStack)
   {
      // This 'if' statement is always true.
   }
}

القواعد ذات الصلة

ca2217: لا تضع علامة تعدادات مع FlagsAttribute

ca1700: لا تسمية قيم Enum 'محجوز'

لا ينبغي معرفات لاحقة غير صحيحة Do not prefix enum values with type name

CA1028: Enum storage should be Int32

ca1027: وضع علامة تتضمن التعدادات مع FlagsAttribute

راجع أيضًا:

المرجع

System.Enum