miroxlav
miroxlav

Reputation: 12194

Where is uppercase/lowercase conversion method for StringComparer.OrdinalIgnoreCase?

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

Answers (1)

Glen Thomas
Glen Thomas

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

Related Questions