2

私はこのようなことをしようとしています:

  // some code...

  string a="aa";
  string b="bb";
  // ...
  if(b>a)    // suppose to be true
   {
     // do somthing
   }

しかし、コンパイルエラーが発生します:

演算子 '>' は、型 'string' および 'string' のオペランドには適用できません。

では、最善のアプローチは何ですか?

4

6 に答える 6

4

CompareTo()の代わりにメソッドを使用します。

if(b.CompareTo(a) > 0)

指定された 2 つの String オブジェクトを比較し、並べ替え順序での相対的な位置を示す整数を返します。

この方法 ;

  • b が a より大きいか、a が null の場合、0 より大きい値を返します。
  • b が a より小さい場合、0 より小さい値を返します。
  • b が a とソート順で同じ位置にある場合、0 を返します。

これを確認してくださいDEMO

于 2013-01-14T11:44:42.013 に答える
3
if(string.Compare(a, b) > 0)

==&を使用できます!=が、他の演算子は使用できません。代わりにstring.Compareを使用してください

于 2013-01-14T11:44:30.557 に答える
1

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);            
    }
 }
于 2013-01-14T12:55:11.723 に答える
1

使用できますCompareTo

if (b.CompareTo(a) > 0) { /*Operate*/ }
于 2013-01-14T11:44:16.187 に答える
1

文字列をそのように比較することはできません。MSDN のこの記事に示されているように、String.Compare() を使用する必要があります。 How to: Compare Strings (C# Programming Guide)

于 2013-01-14T11:44:20.987 に答える
1

使用できますCompareTo

if(b.CompareTo(a) > 0)
于 2013-01-14T11:44:21.327 に答える