I use string.Compare(strA, strB, true, CultureInfo.CurrentCulture); and dont unterstand the result.
CurrentCulture is "de-DE".
string.Compare( "o", "ö", true, CultureInfo.CurrentCulture) // result: -1
string.Compare( "d", "f", true, CultureInfo.CurrentCulture) // result: -1
string.Compare( "dx", "fa", true, CultureInfo.CurrentCulture) // result: -1
string.Compare( "ox", "öa", true, CultureInfo.CurrentCulture) // result: 1
string.Compare( "oa", "öx", true, CultureInfo.CurrentCulture) // result: -1
Why the result depends on the second letter to get different results at last 2 lines? If o ist first and ö is next should line 4 not also return -1? Can someone explain this?
To explain why i have problems with this Compare some code:
class Program
{
public class ComparerB : IComparer<string>
{
public int Compare(string x, string y)
{
return string.CompareOrdinal(x, y);
}
}
public class ComparerA : IComparer<string>
{
public int Compare(string x, string y)
{
return string.Compare(x, y, true, CultureInfo.CurrentCulture);
}
}
static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("Update");
list.Add("Ö3 Greatest Hits");
list.Add("Dont sleep");
list.Add("Friends");
list.Add("Dart vadder");
list.Add("Family");
list.Add("Oxfort");
list.Add("Ödipus");
list.Add("Oasis");
list.Add("Österreich");
list.Add("Panda");
list.Sort(new ComparerA());
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.WriteLine();
list.Sort(new ComparerB());
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
Using ComparerA the result is(mixed Ö and O):
Dart vadder
Dont sleep
Family
Friends
Ö3 Greatest Hits
Oasis
Ödipus
Österreich
Oxfort
Panda
Update
Using ComparerB the result is(Ö at end of list):
Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Panda
Update
Ö3 Greatest Hits
Ödipus
Österreich
But what i need is this(Ö after O):
Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Ö3 Greatest Hits
Ödipus
Österreich
Panda
Update