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
Powiązane reguły
- CA1008: Wyliczenia powinny zawierać wartość zero
- CA1027: Oznacz typy wyliczeniowe atrybutem Flags
- CA2217: Nie oznaczaj wyliczeń za pomocą atrybutu FlagsAttribute
- CA1700: Nie nadawaj wartościom wyliczenia nazwy „Reserved”
- CA1712: Nie poprzedzaj wartości wyliczenia nazwą typu