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

Jas*_*son 6 c# reflection serialization properties

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

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

Ĵ

Kir*_*oll 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 {
}
Run Code Online (Sandbox Code Playgroud)

打印出来:

True
False
Run Code Online (Sandbox Code Playgroud)

  • 大多数内置对象都有多个ToString方法.所以我不得不修改示例以使用以下GetMethod参数:GetMethod("ToString",System.Type.EmptyTypes) (3认同)
  • 但是可能存在从对象以外的基类继承的覆盖. (2认同)
  • 当需要检测结构上的 ToString 覆盖时,也可以与 typeof(ValueType) 进行比较。 (2认同)