【发布时间】:2019-09-17 08:24:51
【问题描述】:
我正在尝试重构我的代码,使其更小、更好看。我正在尝试覆盖 ToString 方法,该方法返回类名及其当前状态的所有字段。这是我的代码:
public override string ToString()
{
var properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).OrderBy(x => x.Name);
//StringBuilder result = new StringBuilder();
//result.Append(GetType().Name);
//result.Append("(");
//foreach (var e in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).OrderBy(x => x.Name))
//{
// result.Append(e.Name);
// result.Append(": ");
// result.Append(e.GetValue(this));
// result.Append(";");
// result.Append(" ");
//}
//result.Remove(result.Length - 2, 2);
//result.Append(")");
//return result.ToString();
}
我得到一个建议,我可以使用 string.Join 与一些 LINQ 结合使用,这样就可以完成这项工作,但我不知道该怎么做。谢谢指教!
【问题讨论】:
-
无论如何,我认为这段代码是一种非常糟糕的覆盖
ToString的方法。看起来您正在尝试找到一种通用方法,但实际上没有。每个班级都应该以自己的方式处理。 -
您可以像下面的答案一样将所有内容塞进一行,但这不会使您的代码更具可读性。删除 StringBuilder 也会降低效率。为什么要强调“小”和“好看”?最好的代码是快速且易读的。