مشاركة عبر


CA1028: Enum storage should be Int32

TypeName

EnumStorageShouldBeInt32

CheckId

ca1028

Category

Microsoft.تصميم

تعطيل تغيير

فصل

السبب

النوع الأساسي للتعداد العام هو System.Int32.

وصف القاعدة

قائمة تعداد هو نوع القيمة التي تعرف التعيين مرتبطة باسم الثوابت. بشكل افتراضي، System.Int32نوع بيانات هو المستخدمة لتخزين القيمة ثابتة. على الرغم من أن يمكنك تغيير ترتيب هو، النوع الأساسي من هو غير الضرورية أو غير مستحسن لمعظم سيناريوهات. لاحظ أن هناك هو لا الربح الأداء الهامة في باستخدام نوع بيانات أقل من Int32. إذا كنت لا تستخدم نوع بيانات الافتراضي، يجب عليك استخدام واحد الأنواع المتكاملة مع CLS Byte، Int16، Int32، أو Int64، إلى التأكد من أنه يمكن تمثيل قيم الجميع التعداد في متوافق مع CLS لغات البرمجة.

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

إلى إصلاح انتهاكا لهذه قاعدة، إلا إذا كانت هناك مشكلات الحجم أو توافق، استخدام Int32. للحالات الموقع Int32ليس كبيرا بما يكفي إلى الاحتفاظ بالقيم، استخدم Int64. إذا إلى الخلف يتطلب توافق نوع بيانات أصغر، استخدم Byteأو Int16.

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

منع ظهور تحذير من هذه قاعدة فقط إذا كانت مشاكل توافق مع الإصدارات السابقة تتطلب ذلك. في التطبيقات، لا يؤدي الفشل في الالتزام بهذه قاعدة عادة مشاكل. في المكتبات، الموقع إمكانية التشغيل التفاعلي للغة هو المطلوبة، وفشل في الالتزام بترتيب هو قاعدة قد يؤثر بشكل سلبي يؤثر على المستخدمين.

مثال انتهاك

الوصف

يظهر المثال التالي التعدادات الثاني لا استخدم نوع بيانات الأساسي الموصى بها.

الرمز

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As UInteger
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As SByte
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

namespace DesignLibrary
{
   [Flags]
   public enum Days : uint
   {
      None        = 0,
      Monday      = 1,
      Tuesday     = 2,
      Wednesday   = 4,
      Thursday    = 8,
      Friday      = 16,
      All         = Monday| Tuesday | Wednesday | Thursday | Friday
   }

   public enum Color :sbyte
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

مثال لكيفية إصلاح إلى

الوصف

تظهر الأمثلة التالية إصلاح انتهاك سابق بتغيير نوع إلى Int32.

الرمز

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As Integer
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As Integer
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

namespace Samples
{
    [Flags]
    public enum Days : int
    {
        None        = 0,
        Monday      = 1,
        Tuesday     = 2,
        Wednesday   = 4,
        Thursday    = 8,
        Friday      = 16,
        All         = Monday| Tuesday | Wednesday | Thursday | Friday
    }

    public enum Color : int
    {
        None        = 0,
        Red         = 1,
        Orange      = 3,
        Yellow      = 4
    }
}

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

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

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

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

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

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

راجع أيضًا:

المرجع

System.Byte

System.Int16

System.Int32

System.Int64