Есть ли способ сказать, если объект реализовал ToString явно в C # - PullRequest
6 голосов
/ 22 сентября 2011

Я пытаюсь записать информацию о состоянии некоторых объектов и классов в моем коде.Не все классы или библиотеки были реализованы с сериализацией.Поэтому я использую Reflection для свойств, чтобы выписать XML-документ о состоянии.Однако у меня есть проблема в том, что некоторые объекты, такие как встроенные классы (например, Strings, DateTime, Numbers и т. Д.), Имеют функцию ToString, которая выводит значение класса осмысленным образом.Но для других классов вызов ToString просто использует унаследованную базовую ToString, чтобы выплевывать имя типа объекта (например, словарь).В этом случае я хочу рекурсивно исследовать свойства внутри этого класса.

Так что, если кто-то может помочь мне с отражением, выяснить, есть ли ToString, реализованная для свойства, которое я смотрю, которое небазовый метод ИЛИ, чтобы указать правильный способ использования GetValue для получения свойств коллекции, я был бы признателен.

J

1 Ответ

10 голосов
/ 22 сентября 2011

Чтобы определить, переопределил ли метод значение по умолчанию .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...