有没有办法告诉对象是否在c#中显式实现了ToString

时间:2011-09-21 22:42:50

标签: c# serialization reflection properties

我正在尝试在代码中记录有关某些对象和类的状态的信息。并非所有类或库都使用序列化实现。所以我在属性上使用Reflection来写出状态的XML文档。但是,我遇到了一些挑战,例如内置类(即字符串,日期时间,数字等)等一些对象具有ToString函数,该函数以有意义的方式打印出类的值。但是对于其他类,调用ToString只是使用继承的基ToString来吐出对象类型的名称(例如Dictionary)。在这种情况下,我想以递归方式检查该类中的属性。

因此,如果有人可以帮我反思,要么弄清楚是否在属性上实现了ToString,我正在查看这不是基本方法或指出使用GetValue检索集合属性的正确方法我很感激。

Ĵ

1 个答案:

答案 0 :(得分:10)

确定方法是否已覆盖默认.ToString()支票MethodInfo.DeclaringType,如下所示:

void Main()
{
    Console.WriteLine(typeof(MyClass).GetMethod("ToString").DeclaringType != typeof(object));
    Console.WriteLine(typeof(MyOtherClass).GetMethod("ToString").DeclaringType != typeof(object));
}

class MyClass 
{
    public override string ToString() { return ""; }
}

class MyOtherClass {
}

打印出来:

True
False