1

'0x12345678' または単に '12345678' などの文字列表現として返されるオブジェクトのインスタンスを取得することは可能ですか?

この疑似コードのようなもの:

string myObjectsInstanceAsAString = myObject.instance.ToString();

ありがとう

4

6 に答える 6

5

overrideの場合は が必要ToString() methodですobject type

public override string ToString(){

   // do implementation here
}

MSDN: 方法: ToString メソッドをオーバーライドする

于 2013-04-22T14:52:28.947 に答える
3
class MyClass {
    private static int _counter = 0;
    private int _id;
    public MyClass() {
        _id = ++_counter;
    }
    public override string ToString() {
        return _id.ToString();
    }
}

それがソートするのに役立つ値になるかどうかはわかりませんが、あなたが求めていることをしているようです。

于 2013-04-22T15:06:24.107 に答える
1

クラスの各インスタンスに一意の ID を割り当てようとしていると仮定すると、クラスのプライベート静的変数を作成し、コンストラクター中にこの値をインクリメントしてインスタンス プロパティに割り当てることができます。

public class MyClass {

    private static long INSTANCE_ID = 0;
    private long ID;

    //ctor
    public MyClass() {
         this.ID = INSTANCE_ID++;
    }

    //You could build your string method based on the ID if you wanted to...
    public long getID() {
         return ID;
    }

}

編集この回答を投稿する前に、@djs のコメントが表示されませんでした。これは彼と全く同じ考えです。

于 2013-04-22T15:06:05.110 に答える
1

インスタンスに基づいて文字列番号を探している場合は、これを試すことができます。

yourInstance.GetHashCode().ToString();

また、メソッドをオーバーライドすることで戻り値を改善できるため、GetHashCode確実に一意の数値を返すことができます。

于 2013-04-22T14:57:56.937 に答える
1

私のコメントによると、これを並べ替えの目的で使用している場合は、IComparable代わりに実装してください。

public class Foo : IComparable<Foo> {
    public int CompareTo(Foo other) {
        return SomeCalculation.CompareTo(other.SomeCalculation());
    }

    private int SomeCalculation() {
        // your implementation
    }
}

これにより、デフォルトのソーターを使用してオブジェクトをソートしたり、オブジェクトを手動で比較したりできます。

于 2013-04-22T15:01:26.860 に答える
1

文字列表現の意味によって異なります。オブジェクトは、さまざまな方法で文字列として表すことができます。.NET でこれを行うデフォルトの方法は、型名を返すことです。つまり、次のコードを記述した場合:

class MyClass { }

// In the main function
MyClass mc = new MyClass();
Console.WriteLine(mc.ToString());

を出力しますMyClass

ただし、これは通常、希望するものではありません。通常、クラスを表現する独自の方法があります。つまり、DateTimeクラス/構造体では、ToStringメソッドは日付と時刻を含む文字列を返す必要があります。

typeのカスタム文字列表現を作成するには、次のToStringメソッドをオーバーライドする必要がありますSystem.Object

class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Person(string fName, string lName) {
        FirstName = fName;
        LastName = lName;
    }

    public override void ToString() {
        return FirstName + " " + LastName;
    }
}

// in your main method
Person p = new Person("Albert", "Einstein");
Console.WriteLine(p.ToString());

これは出力されますAlbert Einstein

于 2013-04-22T15:01:48.603 に答える