Вы можете использовать отражение, чтобы проверить, переопределяет ли класс объекта 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
}