Reputation: 12194
In the simple method below, for string comparers I'm calling corresponding ToLower()
methods. Is there case conversion method for StringComparer.OrdinalIgnoreCase
exposed somewhere in the framework?
Function ToLowerIfCaseInsensitiveComparison(s As String, cmp As StringComparison) As String
Select Case cmp
Case StringComparison.CurrentCultureIgnoreCase
Return s.ToLower()
Case StringComparison.InvariantCultureIgnoreCase
Return s.ToLowerInvariant()
Case StringComparison.OrdinalIgnoreCase
Return ___________________ ' expecting your answers
Case Else
Return s
End Select
End Function
(C# or VB – whatever you prefer. The answer probably won't be language-dependent anyway.)
UPDATE: I have to correct myself regarding lowercase conversion: Best Practices for Using Strings in the .NET Framework says that
Use the String.ToUpperInvariant method instead of the String.ToLowerInvariant method when you normalize strings for comparison.
Upvotes: 1
Views: 599
Reputation: 10754
StringComparison.OrdinalIgnoreCase can be used as a parameter for string.Equals, to save you have to using ToLower to remove case sensitivity in your comparison.
In C#:
var string1 = "Hello";
var string2 = "hello";
Console.WriteLine(string1.Equals(string2, StringComparison.OrdinalIgnoreCase));
// Output: true
An Ordinal comparison is based on the numeric value (Unicode code point) of each Char in the string. If you want to return the string in a format for ordinal comparison you could use this method:
string GetUnicodeString(string s)
{
StringBuilder sb = new StringBuilder();
foreach (char c in s)
{
sb.Append("\\u");
sb.Append(String.Format("{0:x4}", (int)c));
}
return sb.ToString();
}
Upvotes: 2