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