是否可以使用dynamic为对象提供通用的ToString覆盖

时间:2011-03-22 22:32:37

标签: c# linq dynamic

我有点厌倦为我的dto类编写ToString方法。在我看来,有可能将dto转换为动态类型,然后使用linq聚合方法和StringBuilder构建用于记录类型输出的标准字符串。不幸的是,我只是刚开始学习C#中的动态类型,所以我现在有点卡住了。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

以下实现在object上使用扩展方法并使用reflection和linq创建一个包含所有属性名称和值的字符串。 同样,集合/数组必须以不同方式处理

代码编辑删除所有相关代码,只保留所需的扩展名。

public static string ToStringLinq(this object o)
{
    return o.GetType().FullName 
        + Environment.NewLine 
        + string.Join(Environment.NewLine, (from p in o.GetType().GetProperties()
                                            select string.Format("{0}{1}{2}", p.Name, ':', p.GetValue(o, null))));
}

<强>用法

 AnyClass instance = new AnyClass();
 string toString = instance.ToStringLinq();

答案 1 :(得分:0)

如果使用LINQ to SQL或Entity Framework,则必须查看SqlMetal或EF T4模板以生成自定义代码;您可以创建自己的基类,并让所有实体都从此基类继承,该基类具有此方法。

或者创建一个扩展方法来扩展你的类,这个扩展方法使用反射来做你想要的。

HTH。