私はこのようなことをしようとしています:
// some code...
string a="aa";
string b="bb";
// ...
if(b>a) // suppose to be true
{
// do somthing
}
しかし、コンパイルエラーが発生します:
演算子 '>' は、型 'string' および 'string' のオペランドには適用できません。
では、最善のアプローチは何ですか?
CompareTo()
の代わりにメソッドを使用します。
if(b.CompareTo(a) > 0)
指定された 2 つの String オブジェクトを比較し、並べ替え順序での相対的な位置を示す整数を返します。
この方法 ;
- b が a より大きいか、a が null の場合、0 より大きい値を返します。
- b が a より小さい場合、0 より小さい値を返します。
- b が a とソート順で同じ位置にある場合、0 を返します。
これを確認してくださいDEMO
。
if(string.Compare(a, b) > 0)
==
&を使用できます!=
が、他の演算子は使用できません。代わりにstring.Compareを使用してください
String クラスを見ると、演算子>
または<
がこの型に対して定義されていないことがわかりますが、ComapreTo
メソッドは定義されており、他の回答で述べられているように、それが進むべき道です。
これらの演算子を文字列型で使用する場合は、カスタム文字列型を実装し、これらの関係演算子をオーバーロードする必要があります。そのクラスは次のようになります。
public class MyString
{
string str;
public MyString(string str)
{
this.str = str;
}
public static implicit operator MyString(string str)
{
return new MyString(str);
}
public static bool operator < (MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) < 0);
}
public static bool operator >(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) > 0);
}
public static bool operator ==(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) == 0);
}
public static bool operator !=(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) != 0);
}
// other methods and overloads
}
class Program
{
static void Main(string[] args)
{
MyString str1 = "abba";
MyString str2 = "abbb";
MyString str3 = "abba";
MyString str4 = "aabb";
Debug.Assert(str1 < str2);
Debug.Assert(str1 == str3);
Debug.Assert(str1 > str4);
}
}
使用できますCompareTo
。
if (b.CompareTo(a) > 0) { /*Operate*/ }
文字列をそのように比較することはできません。MSDN のこの記事に示されているように、String.Compare() を使用する必要があります。 How to: Compare Strings (C# Programming Guide)
使用できますCompareTo
:
if(b.CompareTo(a) > 0)