1

是否可以获得作为字符串表示形式返回的对象实例,例如 '0x12345678' 或只是 '12345678' ?

像这样的伪代码:

string myObjectsInstanceAsAString = myObject.instance.ToString();

谢谢

4

6 回答 6

5

你需要overrideToString() 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

如果您正在寻找基于实例的字符串编号,您可以尝试以下操作:

yourInstance.GetHashCode().ToString();

您还可以通过覆盖该GetHashCode方法来改进返回值,这样您就可以确定它会返回一个唯一的数字。

于 2013-04-22T14:57:56.937 回答
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

根据我的评论,如果您将其用于排序目的,请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方法应该返回一个包含日期和时间的字符串。

要为类型创建自定义字符串表示,您需要覆盖以下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 回答