c# - 有没有办法判断一个对象是否在 C# 中显式实现了 ToString

标签 c# serialization reflection properties

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

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

J

最佳答案

要确定方法是否覆盖了默认的 .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

关于c# - 有没有办法判断一个对象是否在 C# 中显式实现了 ToString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507609/

相关文章:

c# - 通过匹配文本的字符串部分来删除重复项

c# - 将 JSON 对象转换为 C# 对象

java - jsonrpc4j : How to add type info to parameters?

c# - 无法将 JSON 数组反序列化为类型 - Json.NET

c# - 将元素值及其属性序列化

reflection - 神秘的类型断言失败?

c# - 获取调用对象的哈希码?

c# - 4.6 新UI 如何更改按钮图像?

c# - 加载 ASP.NET DropDownList

C# 对象到数组