CA1303: Ne adjon át literálokat honosított paraméterekként
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1303 |
Cím | Ne adjon át literálokat honosított paraméterekként |
Kategória | Globalizáció |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A metódus paraméterként átad egy sztringkonstanst egy .NET-konstruktornak vagy metódusnak, és ennek a sztringnek honosíthatónak kell lennie.
Ez a figyelmeztetés akkor jelenik meg, ha egy literális sztring értéket ad egy paraméternek vagy tulajdonságnak, és az alábbi helyzetek közül egy vagy több igaz:
A LocalizableAttribute paraméter vagy tulajdonság attribútuma a következőre
true
van állítva: .A literális sztring Console.Write egy vagy Console.WriteLine több metódus túlterhelésének vagy
string format
paraméterének lesz átadvastring value
.A CA1303 szabály az elnevezési heurisztikus használatára van konfigurálva, és egy paraméter vagy tulajdonságnév tartalmazza az
Text
,Message
vagyCaption
.
Ez a szabály alapértelmezés szerint a teljes kódbázist elemzi, de ez konfigurálható.
Szabály leírása
A forráskódba beágyazott sztringkonstansokat nehéz honosítani.
Szabálysértések kijavítása
A szabály megsértésének kijavításához cserélje le a sztringkonstanst az osztály egy példányán ResourceManager keresztül lekért sztringre.
A honosított sztringeket nem igénylő metódusok esetében a ca1303 szükségtelen figyelmeztetéseit a következő módokon távolíthatja el:
- Ha az elnevezési heurisztikus beállítás engedélyezve van, nevezze át a paramétert vagy tulajdonságot.
- Távolítsa el az LocalizableAttribute attribútumot a paraméteren vagy tulajdonságon, vagy állítsa (
[Localizable(false)]
) értékrefalse
.
Mikor kell letiltani a figyelmeztetéseket?
Ha az alábbi utasítások valamelyike érvényes, nyugodtan letilthatja a szabály figyelmeztetését:
- A kódtár nem honosított.
- A sztring nem érhető el a végfelhasználó vagy a kódtárat használó fejlesztő számára.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1303
// The code that's violating the rule is on this line.
#pragma warning restore CA1303
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1303.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
- Adott szimbólumok kizárása
- Adott típusok és származtatott típusok kizárása
- Elnevezési heurisztikus használata
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Globalization), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott szimbólumok kizárása
Bizonyos szimbólumokat, például típusokat és metódusokat kizárhat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
típusok egyikén sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak szimbólumnév (a névvel ellátott összes szimbólumot tartalmazza, függetlenül attól, hogy milyen típusú vagy névtérrel rendelkezik).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek. Minden szimbólumnévhez szimbólum típusú előtag szükséges, például
M:
metódusokhoz,T:
típusokhoz ésN:
névterekhez. .ctor
konstruktorok és.cctor
statikus konstruktorok számára.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Megegyezik az összes elnevezett MyType szimbólummal. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Megegyezik az összes elnevezett MyType1 szimbólummal vagy MyType2 . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Megfelel a megadott metódusnak MyMethod a megadott teljes jogosultsággal rendelkező aláírással. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Egyezik az adott metódusokkal MyMethod1 és MyMethod2 a megfelelő, teljes mértékben minősített aláírásokkal. |
Adott típusok és származtatott típusok kizárása
Bizonyos típusokat és azok származtatott típusait kizárhatja az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType
és származtatott típusok egyik metódusán sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |
elválasztva):
- Csak típusnév (a névvel rendelkező összes típust tartalmazza, függetlenül attól, hogy milyen típust vagy névteret tartalmaz).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek opcionális
T:
előtaggal.
Példák:
Beállítás értéke | Összegzés |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Megfelel az összes névvel ellátott MyType típusnak és az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Megfelel az összes névvel ellátott MyType1 típusnak, vagy MyType2 az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Egyezik MyType a megadott teljes névvel és az összes származtatott típusával. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Egyezik az adott típusokkal MyType1 és MyType2 a megfelelő teljes névvel, valamint az összes származtatott típussal. |
Elnevezési heurisztikus használata
Beállíthatja, hogy a szabályt tartalmazó Text
Message
Caption
paraméterek vagy tulajdonságnevek aktiválják-e a szabályt.
dotnet_code_quality.CA1303.use_naming_heuristic = true
Példa
Az alábbi példa egy olyan metódust mutat be, amely akkor ír a konzolra, ha a két argumentum valamelyike kívül esik a tartományon. hour
Az argumentum-ellenőrzéshez a függvény egy literális sztringet Console.WriteLine
ad át, amely megsérti ezt a szabályt. Az argumentum-ellenőrzésnél a minute
rendszer egy olyan sztringet ad ResourceManager át Console.WriteLine
, amely megfelel a szabálynak.
<Assembly: System.Resources.NeutralResourcesLanguageAttribute("en-US")>
Namespace GlobalizationLibrary
Public Class DoNotPassLiterals
Dim stringManager As System.Resources.ResourceManager
Sub New()
stringManager = New System.Resources.ResourceManager(
"en-US", System.Reflection.Assembly.GetExecutingAssembly())
End Sub
Sub TimeMethod(hour As Integer, minute As Integer)
If (hour < 0 Or hour > 23) Then
'CA1303 fires because a literal string
'is passed as the 'value' parameter.
Console.WriteLine("The valid range is 0 - 23.")
End If
If (minute < 0 Or minute > 59) Then
Console.WriteLine(
stringManager.GetString("minuteOutOfRangeMessage",
System.Globalization.CultureInfo.CurrentUICulture))
End If
End Sub
End Class
End Namespace
public class DoNotPassLiterals
{
ResourceManager stringManager;
public DoNotPassLiterals()
{
stringManager = new ResourceManager("en-US", Assembly.GetExecutingAssembly());
}
public void TimeMethod(int hour, int minute)
{
if (hour < 0 || hour > 23)
{
// CA1303 fires because a literal string
// is passed as the 'value' parameter.
Console.WriteLine("The valid range is 0 - 23.");
}
if (minute < 0 || minute > 59)
{
Console.WriteLine(stringManager.GetString(
"minuteOutOfRangeMessage", CultureInfo.CurrentUICulture));
}
}
}