Udostępnij za pośrednictwem


CA1028: Pamięć wyliczenia powinna być Int32

Właściwości Wartość
Identyfikator reguły CA1028
Tytuł Magazyn typu wyliczeniowego powinien być typu Int32
Kategoria Projekt
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Podstawowym typem wyliczenia nie System.Int32jest .

Domyślnie ta reguła analizuje tylko widoczne zewnętrznie wyliczenia, ale można to skonfigurować.

Opis reguły

Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych. Domyślnie System.Int32 typ danych jest używany do przechowywania stałej wartości. Mimo że można zmienić ten typ bazowy, nie jest to konieczne ani zalecane w przypadku większości scenariuszy. Nie uzyskuje się znaczącego wzrostu wydajności przy użyciu typu danych mniejszego niż Int32. Jeśli nie możesz użyć domyślnego typu danych, należy użyć jednego z typów Bytecałkowitych zgodnych ze standardem COMMON Language System (CLS), , Int16, Int32lub Int64 , aby upewnić się, że wszystkie wartości wyliczenia mogą być reprezentowane w językach programowania zgodnych ze specyfikacją CLS.

Jak naprawić naruszenia

Aby rozwiązać problem z naruszeniem tej reguły, chyba że istnieją problemy z rozmiarem lub zgodnością, użyj polecenia Int32. W sytuacjach, w których Int32 nie jest wystarczająco duża, aby przechowywać wartości, użyj polecenia Int64. Jeśli zgodność z poprzednimi wersjami wymaga mniejszego typu danych, użyj polecenia Byte lub Int16.

Kiedy pomijać ostrzeżenia

Pomiń ostrzeżenie z tej reguły tylko wtedy, gdy wymagają tego problemy ze zgodnością z poprzednimi wersjami. W aplikacjach niezgodność z tą regułą zwykle nie powoduje problemów. W bibliotekach, w których wymagana jest współdziałanie języka, niepowodzenie zgodności z tą regułą może niekorzystnie wpłynąć na użytkowników.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Konfigurowanie kodu do analizowania

Użyj następującej opcji, aby skonfigurować, które części bazy kodu mają być uruchamiane w tej regule.

Tę opcję można skonfigurować tylko dla tej reguły, dla wszystkich reguł, do których ma ona zastosowanie, lub dla wszystkich reguł w tej kategorii (Projekt), których dotyczy. Aby uzyskać więcej informacji, zobacz Opcje konfiguracji reguły jakości kodu.

Uwzględnij określone powierzchnie interfejsu API

Możesz skonfigurować, na których częściach bazy kodu ma być uruchamiana ta reguła, na podstawie ich ułatwień dostępu. Aby na przykład określić, że reguła powinna być uruchamiana tylko na powierzchni niepublicznego interfejsu API, dodaj następującą parę klucz-wartość do pliku editorconfig w projekcie:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Przykład

W poniższym przykładzie przedstawiono dwa wyliczenia, które nie używają zalecanego typu danych bazowych.

[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
}
<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

Poniższy przykład naprawia poprzednie naruszenie przez zmianę bazowego typu danych na Int32.

[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
}
<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

Zobacz też