【问题标题】:How to format my class? With toString, in the GUI or in other way?如何格式化我的课程?使用 toString,在 GUI 中还是以其他方式?
【发布时间】:2012-04-30 12:44:26
【问题描述】:

我在一个库中有一些类,它们代表一些文件的分析和验证结果。

这些类包含枚举、无效属性列表等。

我编写了一个使用该库的 GUI 应用程序,并编写了一些函数以在富文本框中以可读形式编写这些类。

我突然想到,我可能必须在类的 ToString 覆盖中编写这种格式。

但是,所有这些格式都很长,包括插入制表符和新行,包括对列表的多次迭代,提取枚举描述等。

所以我想知道 - toString 大小和复杂性的标准是什么?我想在 toString 中编写困难的格式吗?或者也许我应该提供一些其他通用接口——类的格式化可打印输出是否有任何通用接口?还是我应该在 GUI 应用程序中执行?

谢谢!

【问题讨论】:

  • 不要忘记本地化。 GUI 文本应该在资源文件中。您确定您的程序只会以一种语言使用吗?如果不看到至少一些代码,很难说出你应该如何最好地做你想做的事。 ToString 似乎最适合获取真正的基本值,例如 int 的值。它对于获取对象的调试表示也很有用。例如,如果您在枚举上执行 ToString,您会得到一个充其量是驼峰式的值,这可能不是您想要向用户显示的值。

标签: c# formatting tostring


【解决方案1】:

除了 UI 库之外,不应将 UI 格式之类的内容添加到任何库中。

相反,您可以提供一组与 UI 无关的类,这些类可以格式化您的实体,例如,可以执行生成格式所需的复杂代码,并期望在 UI 中显示。

这些可以使用简单的界面,例如:

public interface IEntityFormatter<T>
{
    string GetFormattedValue(T myEntity);
}

public class Customer
{
    public string FullName {get;set;}
}

public class CustomerFormatter : IEntityFormatter<Customer>
{
    public string GetFormattedValue(Customer myEntity)
    {
        return myEntity.FullName;
    }
}

【讨论】:

    【解决方案2】:

    一般ToString不应该很复杂,否则可能会减慢调试速度(注意它经常被调试器自动调用)。添加您自己的界面还允许您添加更多自定义。另一方面,如果您不需要任何格式设置,那么ToString 可能是实现它的好地方。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2019-09-04
      • 2018-07-29
      • 2011-10-17
      • 2017-03-26
      相关资源
      最近更新 更多