以下は大文字と小文字が区別されることを知っています。
if (StringA == StringB) {
では、2 つの文字列を無差別に比較する演算子はありますか?
以下は大文字と小文字が区別されることを知っています。
if (StringA == StringB) {
では、2 つの文字列を無差別に比較する演算子はありますか?
これを試して:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
文字の大文字と小文字を無視して 2 つの文字列を比較する最良の方法は、大文字と小文字を区別しない序数文字列比較を指定するString.Equals静的メソッドを使用することです。これは最速の方法でもあり、文字列を小文字または大文字に変換してから比較するよりもはるかに高速です。
両方のアプローチのパフォーマンスをテストしたところ、大文字と小文字を区別しない序数の文字列比較は9 倍以上高速でした。また、文字列を小文字または大文字に変換するよりも信頼性が高くなります (Turkish i problem を確認してください)。そのため、常にString.Equalsメソッドを使用して、文字列が等しいかどうかを比較します。
String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase);
カルチャ固有の文字列比較を実行する場合は、次のコードを使用できます。
String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);
2 番目の例では、現在のカルチャの文字列比較ロジックを使用しているため、最初の例の「序数を無視する」比較よりも遅くなることに注意してください。そのため、カルチャ固有の文字列比較ロジックが必要なく、最大のパフォーマンスの後、「序数無視ケース」比較を使用します。
詳細については、私のブログで全文をお読みください。
StringComparer
静的クラスには、大文字と小文字を区別する任意のタイプの比較子を返す多くのプロパティがあります。
たとえば、次のように呼び出すことができます。
StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)
また
StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)
引数を取るstring.Equals
orオーバーロードよりも少しきれいです。string.Compare
StringComparison
System.Collections.CaseInsensitiveComparer
また
System.StringComparer.OrdinalIgnoreCase
string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase);
また
if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) {
ただし、StringA が null でないことを確認する必要があります。したがって、おそらく使用する方が良いでしょう:
string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase);
ジョンが提案したように
編集:バグを修正しました
使用できます
if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase))
オペレーター?いいえ、文字列比較で大文字と小文字が区別されないように文化を変更できると思います。
// you'll want to change this...
System.Threading.Thread.CurrentThread.CurrentCulture
// and you'll want to custimize this
System.Globalization.CultureInfo.CompareInfo
文字列が equals 演算子によって比較される方法が変わると確信しています。
私は、これらの比較方法の最後に次のように入力することに慣れています。, StringComparison.
ということでエクステンションを作りました。
namespace System
{ public static class StringExtension
{
public static bool Equals(this string thisString, string compareString,
StringComparison stringComparison)
{
return string.Equals(thisString, compareString, stringComparison);
}
}
}
thisString
ext を呼び出す前に、null をチェックする必要があることに注意してください。
if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) {
ToUpperInvariant() は ToLowerInvariant() よりも高速であると報告されています。
string.Compare(string1, string2, true)