2 // System.Collections.CaseInsensitiveComparer.cs
5 // Sergey Chaban (serge@wildwestsoftware.com)
6 // Eduardo Garcia Cebollero (kiwnix@yahoo.es)
7 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
10 using System.Globalization;
12 namespace System.Collections
15 public class CaseInsensitiveComparer : IComparer
17 private static CaseInsensitiveComparer defaultComparer = new CaseInsensitiveComparer ();
18 private static CaseInsensitiveComparer defaultInvariantComparer = new CaseInsensitiveComparer (true);
20 private CultureInfo culture;
22 // Public instance constructor
23 public CaseInsensitiveComparer ()
25 //LAMESPEC: This seems to be encoded while the object is created while Comparer does this at runtime.
26 culture = CultureInfo.CurrentCulture;
29 private CaseInsensitiveComparer (bool invariant)
31 // leave culture == null
34 public CaseInsensitiveComparer (CultureInfo culture)
37 throw new ArgumentNullException ("culture");
39 if (culture.LCID != CultureInfo.InvariantCulture.LCID)
40 this.culture = culture;
41 // else leave culture == null
45 // Public static properties
47 public static CaseInsensitiveComparer Default {
49 return defaultComparer;
58 static CaseInsensitiveComparer DefaultInvariant {
60 return defaultInvariantComparer;
67 public int Compare (object a, object b)
69 string sa = a as string;
70 string sb = b as string;
72 if ((sa != null) && (sb != null)) {
74 return culture.CompareInfo.Compare (sa, sb, CompareOptions.IgnoreCase);
76 // FIXME: We should call directly into an invariant compare once available in string
77 return CultureInfo.InvariantCulture.CompareInfo.Compare (sa, sb, CompareOptions.IgnoreCase);
80 return Comparer.Default.Compare (a, b);