是否可以使用动态为对象提供通用 ToString 覆盖

发布于 2024-10-26 05:39:08 字数 151 浏览 0 评论 0原文

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

I'm a little tired of writing ToString methods for my dto classes. It occurred to me that it might be possible to convert a dto to a dynamic type and then use the linq aggregate method and StringBuilder to construct a standard string for logging type output. Unfortunately I'm only just starting to learn about dynamic types in C# so I'm a little bit stuck right now. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吝吻 2024-11-02 05:39:08

以下实现在 object 上使用扩展方法,并使用反射和 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();

Following implementation uses an extention method on object and using reflection and linq creates a string of all property names and values. Again, collections/arrays have to be handled differently.

CODE EDIT Removing all the related code and only keeping the extention required.

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))));
}

Usage

 AnyClass instance = new AnyClass();
 string toString = instance.ToStringLinq();
寒尘 2024-11-02 05:39:08

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

或者创建一个扩展方法来扩展您的类,并且此扩展方法使用反射来执行您想要的操作。

HTH。

If using LINQ to SQL or Entity Framework, you have to look at SqlMetal or the EF T4 templates to generate custom code; you can create your own base class and have all your entities inherit from this base class, which has this method.

Or create an extension method to extend your classes and this extension method uses reflection to do what you want.

HTH.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文