Visual Studio 2010中是否有ToString()生成器?

时间:2011-02-08 10:53:33

标签: c# visual-studio-2010

有没有办法使用Visual Studio 2010生成ToString()

我真的不想亲手做到这一点!

[编辑]

我正在寻找我的模型的简单字符串表示。在以前的IDE中*使用简单的模板和字段选择在UI中启用了ToString生成。

目前,Equals和Hashcode的默认实现以类似的模式提供。我希望ToString有类似的东西。

默认情况下似乎没有 - 感谢您的回复!

(*这是我的第一个.net项目)

11 个答案:

答案 0 :(得分:20)

Resharper通过生成“格式化成员”

来支持此功能

https://www.jetbrains.com/resharper/webhelp/Code_Generation__Formatting_Members.html

Resharper -> Edit -> Generate Code -> Formatting Members

alt + insert -> Formatting Members

我确认这可以在Resharper 8中找到。

答案 1 :(得分:6)

您可以使用StatePrinter project

class AClassWithToString
{
  string B = "hello";
  int[] C = {5,4,3,2,1};

  // Nice stuff ahead!
  static readonly StatePrinter printer = new StatePrinter();
  public override string ToString()
  {
    return printer.PrintObject(this);
  }
}

答案 2 :(得分:4)

VS 2010甚至没有自动生成ToString方法的主要痛苦,语法足够接近Java,我使用Ecilpse生成ToString然后将其粘贴到VS ...

答案 3 :(得分:4)

开箱即用的VS不存在,但如果你不想自己实现它,它会在ReSharper plugin上。该插件是商业广告,但我个人认为这是值得的。

使用ReSharper,它将是alt + ins - >压倒成员 - >当类名在光标上时为tostring。

答案 4 :(得分:4)

使用Reflection,您实际上可以编写ToString()方法:

public override String ToString()
{
    Type objType = this.GetType();
    PropertyInfo[] propertyInfoList = objType.GetProperties();
    StringBuilder result = new StringBuilder();
    foreach (PropertyInfo propertyInfo in propertyInfoList)
         result.AppendFormat("{0}={1} ", propertyInfo.Name, propertyInfo.GetValue(this));

     return result.ToString();
}

答案 5 :(得分:3)

您可以为每个样板代码创建自己的自定义代码段,并从IntelliSence中访问它 这是一个很好的教程http://msdn.microsoft.com/en-us/library/ms165392.aspx

详细了解如何使用替换创建代码段。您可以创建非常通用的结构。

答案 6 :(得分:3)

也许你应该看看AutoCode 4.0。它是一个Visual Studio扩展,它将带来一些片段。

例如,你可以在你班级的某个地方编写tostr并按 Ctrl + Enter ,它会自动生成ToString()方法连接该类的所有公共属性。

答案 7 :(得分:0)

如果你不编写自己的ToString方法,Object会为你提供一个(虽然不是很有用,因为它只返回对象类型的名称空间和名称)。

否则,你必须自己创建它,因为IDE不可能知道你想要输出什么作为对象的ToString方法。

答案 8 :(得分:0)

如果您需要在调试时更好地表示对象,可以使用DebuggerDisplayAttribute

[DebuggerDisplay("Count = {count}")]
class MyHashtable
{
    public int count = 4;
}

这可能比覆盖ToString更快,但它仍然不允许您选择字段,您必须键入它们。

答案 9 :(得分:-3)

由于被覆盖的ToString()方法的逻辑取决于您自己的业务需求,我唯一能想到的是加载项,它会创建空的ToString()你在里面调用base.ToString()的覆盖,如果你没有自定义它的内容,那么就没有任何意义。

如果您开始输入公共覆盖,Visual Studio已经帮助了很多,至少在C#中。

答案 10 :(得分:-3)

ToString()object上的一种方法,因此您无需将其添加到所有类中,只需要覆盖和更改行为。