Как определить, можно ли преобразовать объект в значимую строку в C # - PullRequest
3 голосов
/ 12 ноября 2009

Мне нужно определить, будет ли метод объекта ToString () возвращать значимую строку вместо имени своего класса. Например, bool, int, float, Enum и т. Д. Возвращает значимую строку, вместо этого экземпляр ArrayList возвращает «System.Collections.ArrayList». Если есть простой способ заархивировать это?

Заранее спасибо.

С уважением, Wayne

Ответы [ 2 ]

24 голосов
/ 12 ноября 2009

Вы можете сравнить object.ToString() с object.GetType().ToString()?

Доброжелательность,

Dan

3 голосов
/ 12 ноября 2009

Вы можете использовать отражение, чтобы проверить, переопределяет ли класс объекта toString. Как это

if (obj.GetType().GetMethod("toString",
    BindingFlags.Instance |
    BindingFlags.Public |
    BindingFlags.DeclaredOnly) != null)
{
    // do smth
}

Обновление - посмотрите, есть ли у какого-либо базового класса реализация toString, которая не из Object.

        MethodInfo pi = null;
        Type t = obj.GetType(0;
        while (t != typeof(object) && pi == null)
        {
            pi = t.GetMethod("toString",
                BindingFlags.Instance |
                BindingFlags.Public | 
                BindingFlags.DeclaredOnly);
            t = t.BaseType;
        }

        if (pi != null)
        {
            // do smth
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...