CA1304: CultureInfo angeben
TypeName |
SpecifyCultureInfo |
CheckId |
CA1304 |
Kategorie |
Microsoft.Globalization |
Unterbrechende Änderung |
Nicht unterbrechend |
Ursache
Eine Methode oder ein Konstruktor ruft einen Member auf, der eine Überladung besitzt, die einen System.Globalization.CultureInfo-Parameter akzeptiert. Die Methode oder der Konstruktor ruft die Überladung nicht auf, die den CultureInfo akzeptiert. Diese Regel ignoriert Aufrufe der folgenden Methoden:
Regelbeschreibung
Wenn ein CultureInfo-Objekt oder ein System.IFormatProvider-Objekt nicht angegeben wird, hat der Standardwert, der vom überladenen Member bereitgestellt wird, möglicherweise nicht in allen Gebietsschemas den gewünschten Effekt. Zudem basiert bei .NET Framework-Membern die Auswahl von Standardkultur und Formatierung auf Annahmen, die möglicherweise nicht auf Ihren Code zutreffen. Um sicherzustellen, dass der Code in den vorgesehenen Szenarien das erwartete Verhalten zeigt, sollten Sie sich bei der Angabe kulturspezifischer Daten an die folgenden Richtlinien halten:
Wenn der Wert dem Benutzer angezeigt wird, verwenden Sie die aktuelle Kultur. Weitere Informationen finden Sie unter CultureInfo.CurrentCulture.
Wenn der Wert gespeichert wird und Software auf diesen Wert zugreift, d. h. wenn er in einer Datei oder Datenbank gespeichert wird, verwenden Sie die nicht variante Kultur. Weitere Informationen finden Sie unter CultureInfo.InvariantCulture.
Wenn Sie den Empfänger des Werts nicht kennen, lassen Sie den Datennutzer oder -anbieter die Kultur angeben.
Beachten Sie, dass CultureInfo.CurrentUICulture nur verwendet wird, um lokalisierte Ressourcen mit einer Instanz der System.Resources.ResourceManager-Klasse abzurufen.
Auch wenn das Standardverhalten des überladenen Members für Ihre Zwecke geeignet ist, ist es besser, die kulturspezifische Überladung aufzurufen, damit der Code selbstdokumentierend und einfacher zu pflegen ist.
Behandeln von Verstößen
Um Verstöße gegen diese Regel zu beheben, verwenden Sie die Überladung, die ein CultureInfo-Objekt oder IFormatProvider-Objekt als Parameter übernimmt, und geben das Argument entsprechend der oben angegebenen Richtlinien an.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn sicher ist, dass die Standardkultur/der Formatanbieter die richtige Wahl darstellt und die Wartbarkeit des Codes keine hohe Entwicklungspriorität darstellt.
Beispiel
Im folgenden Beispiel verursacht BadMethod zwei Verstöße gegen diese Regel. GoodMethod korrigiert den ersten Verstoß, indem sie die invariante Kultur an System.String.Compare übergeben, und korrigiert den zweiten Verstoß durch das Übergeben der aktuellen Kultur an ToLower, da dem Benutzer string3 angezeigt wird.
using System;
using System.Globalization;
namespace GlobalizationLibrary
{
public class CultureInfoTest
{
public void BadMethod(String string1, String string2, String string3)
{
if(string.Compare(string1, string2, false) == 0)
{
Console.WriteLine(string3.ToLower());
}
}
public void GoodMethod(String string1, String string2, String string3)
{
if(string.Compare(string1, string2, false,
CultureInfo.InvariantCulture) == 0)
{
Console.WriteLine(string3.ToLower(CultureInfo.CurrentCulture));
}
}
}
}
Das folgende Beispiel veranschaulicht, welche Auswirkung die Standardkultur auf das voreingestellte IFormatProvider-Objekt hat, das vom DateTime-Typ ausgewählt wird.
using System;
using System.Globalization;
using System.Threading;
namespace GlobalLibGlobalLibrary
{
public class IFormatProviderTest
{
public static void Main()
{
string dt = "6/4/1900 12:15:12";
// The default behavior of DateTime.Parse is to use
// the current culture.
// Violates rule: SpecifyIFormatProvider.
DateTime myDateTime = DateTime.Parse(dt);
Console.WriteLine(myDateTime);
// Change the current culture to the French culture,
// and parsing the same string yields a different value.
Thread.CurrentThread.CurrentCulture = new CultureInfo("Fr-fr", true);
myDateTime = DateTime.Parse(dt);
Console.WriteLine(myDateTime);
}
}
}
Folgende Ergebnisse werden zurückgegeben:
Verwandte Regeln
CA1305: IFormatProvider angeben