Zinßpanne gleich Börsencrash ;-?

21/05/2009 - 16:51 von Hubert Seidel | Report spam
Hallo NG,

einfach mal zur Diskussion so in den Raum gestellt:


// csc /out:test.exe /incremental+ /target:exe /recurse:*.cs > log.txt
using System;
class TestClass
{
static void Main()
{
string a = "Zinsspanne";
string b = "Zinßpanne";
string v;

int cmp = String.Compare(a,b,false);

switch (cmp) {
case -1: v="kleiner als"; break;
case 0: v="gleich"; break;
case +1: v="größer als"; break;
default: v="<?>"; break;
}

Console.WriteLine("'"+a+"' ist "+v+" '"+b+"'!");

if (cmp==0) {
Console.WriteLine("Ist '"+b+"' gleich 'Börsencrash' ;-?");
}

}
}



Scheint bei einige deutschen Betriebßysteme
(Làndereinstellungsabhàngig) offensichtlich
so zu sein :-)

mfg.
Herby

http://www.hubert-seidel.eu
 

Lesen sie die antworten

#1 Frank Dzaebel
21/05/2009 - 19:02 | Warnen spam
Hallo Hubert,

string a = "ss"; string b = "ß";
int cmp = String.Compare(a,b,false); // ergibt 0
Scheint bei einige deutschen Betriebßysteme
(Làndereinstellungsabhàngig) offensichtlich
so zu sein :-)



Zunàchst, wenn Du mal eine Code-Analyse
durchgeführt hàttest, hàttest Du es sicher
selber herausgefunden ... :
_______________
Warnung 7 CA1304 : Microsoft.Globalization : Da das Verhalten von
'string.Compare(string, string, bool)' je nach den
Gebietsschemaeinstellungen des aktuellen Benutzers unterschiedlich sein
kann, sollten Sie diesen Aufruf in 'TestClass.Main()' durch einen Aufruf von
'string.Compare(string, string, bool, CultureInfo)' ersetzen. Das Ergebnis
von 'string.Compare(string, string, bool, CultureInfo)' wird dem Benutzer
angezeigt. Geben Sie CultureInfo.CurrentCulture als CultureInfo-Parameter
an. Wenn das Ergebnis gespeichert und von Software genutzt wird,
beispielsweise beim dauerhaften Speichern auf der Festplatte oder in einer
Datenbank, geben Sie CultureInfo.InvariantCulture an. C:\Users\Frank
Dzaebel\Documents\Visual Studio
2008\Projects\ConsoleApplication7\ConsoleApplication7\Program.cs 11
ConsoleApplication7

[CultureInfo angeben]
http://msdn.microsoft.com/de-de/lib...82189.aspx

_______________
Warnung 8 CA1307 : Microsoft.Globalization : 'TestClass.Main()' ruft
'string.Compare(string, string, bool)' auf. Durch 'string.Compare(string,
string, bool)' wird StringComparison nicht explizit bereitgestellt.
'string.Compare(string, string, bool)' sollte durch einen Aufruf von
'string.Compare(string, string, StringComparison)' ersetzt werden.
C:\Users\Frank Dzaebel\Documents\Visual Studio
2008\Projects\ConsoleApplication7\ConsoleApplication7\Program.cs 11
ConsoleApplication7

[StringComparison angeben]
http://msdn.microsoft.com/de-de/lib...86080.aspx


_______________

Das, was Du da ausführst ist ein lokalisiertes
linguistisches String.Compare, also im Prinzip:

CultureInfo.CurrentCulture.CompareInfo.Compare(
a, b, CompareOptions.IgnoreCase);

Hier der Wortlaut der MSDN-Dokumentation:

"Durch eine Kultur kann z. B. festlegt sein, dass bestimmte
Kombinationen von Zeichen als ein einzelnes Zeichen
behandelt werden, Zeichen in Groß- und Kleinschreibung
auf bestimmte Weise verglichen werden oder die
Sortierreihenfolge eines Zeichens vom vorangehenden
bzw. nachfolgenden Zeichen abhàngt. "

[String.Compare-Methode (String, String, Boolean) (System)]
http://msdn.microsoft.com/de-de/lib...axw5y.aspx

Eine Möglichkeit in Deinem Sinne ist zum Beispiel:

int res = String.Compare(a, b, StringComparison.Ordinal);


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen