在Visual Studio 2010中是否有可用的ToString()生成器?

40

有没有办法在Visual Studio 2010中生成ToString()方法?

我真的不想手动添加!

[编辑]

我想要一个简单的模型字符串表示。在之前的集成开发环境中,使用简单的模板和字段选择,可以在用户界面中启用ToString生成。

目前提供了Equals和Hashcode的默认实现,其模式类似。我希望能找到类似于ToString的东西。

看起来默认情况下没有 - 感谢回复!

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


1
它应该基于什么生成字符串表示? - anthares
1
在ReSharper中,我从未在没有它的情况下使用VS,所以我真的不知道是否有其他的。 - Eduard
1
你是指“覆盖”吗?如果是的话,只需键入“override”,空格并从列表中选择“ToString” - 它将为您生成方法体。 - Jaroslav Jandek
1
@lainie,我和你一样。我们都在寻找像Eclipse一样的愚蠢简单的ToString生成器:http://wiki.eclipse.org/ToString()_generation。我认为不太多的.NET程序员熟悉这种功能。 - Richard Clayton
1
很遗憾,即使是第一版,VS2010也不像IntelliJ IDEA那样智能。也许这是因为在.NET中,覆盖ToString()方法并不像Java中那么流行。 - meir
显示剩余4条评论
11个回答

26

1
就在你认为你找到了ReSharper无法帮助的东西时... - FishySwede

10

使用反射你可以编写一个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();
}

3
反射和应用程序性能。ToString方法应该尽可能快地执行。 - Andrew

6
您可以使用 StatePrinter 项目
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);
  }
}

我认为这是一个好建议,并给了它一个赞。但是,要小心那些试图从VB而不是C#实现此操作的人:http://stackoverflow.com/q/35092412/165164 - Anne Gunn

4

VS 2010没有自动生成ToString方法,这是一个主要的问题。语法与Java非常接近,在Java中我使用Ecilpse来生成ToString方法,然后将其复制到VS中...


4
它不是Visual Studio的默认功能,但在ReSharper插件中有此功能,如果您不想自己实现。该插件是商业软件,但我个人认为它物超所值。
使用ReSharper,可以通过alt+ins -> 重写成员 -> tostring来实现,在类名位于光标上时。

alt+ins -> 格式化成员在 R# 7.1 中也会生成 ToString。ReSharper 是一个不可或缺的工具。 - Travis

4
您可以为每个样板代码创建自己的自定义片段,并从 IntelliSense 中访问它。
这里有一个不错的教程:http://msdn.microsoft.com/zh-cn/library/ms165392.aspx
仔细看看如何创建具有替换内容的片段。您可以创建相当通用的结构。

10
我不知道为什么这个解决方案被接受了。它提供的信息充其量只是和问题有些关联。代码片段没有能力满足提问者的要求。 - Eric Haynes

3
也许你应该看看 AutoCode 4.0。这是一个Visual Studio扩展,带有一些代码片段。
例如,在类的某个地方,您只需编写tostr并按Ctrl+Enter,它将自动生成连接类的所有公共属性的ToString()方法。

1
但是希望有一个适用于VS 2013的版本 :-( - One-One

2

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

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

这比重写ToString方法更快,但仍然无法让您选择字段,您必须手动输入它们。


0
如果您不编写自己的 ToString 方法,Object 会为您提供一个(虽然不是很有用,因为它只返回对象类型的命名空间和名称)。
否则,您必须自己创建它,因为 IDE 不可能知道您想要将对象的 ToString 方法输出为什么。

20
Eclipse和NetBeans提供本地变量转储,这就是我认为她所要求的。我浏览此帖子是为了寻找相同的答案。 - Richard Clayton
而 IntelliJ 则是一如既往的强大,而 Visual Studio 则落后了 10 年。 - sproketboy

-3

由于重写的 ToString() 方法的逻辑取决于您自己的业务需求,我能想到的唯一方法是创建一个 插件,为您创建空的 ToString() 重写,并在其中调用 base.ToString(),如果您不自定义其内容,则没有任何意义这样做。

Visual Studio 已经为您提供了很多帮助,至少在 C# 中,如果您开始输入 public overrides。


2
如果您从override开始,并从下拉菜单中选择ToString方法,则public将自动添加。 - Øyvind Bråthen
5
“我能想象到的唯一事情是”……那么像Eclipse一样打印出本地变量怎么样?我不认为这会超出想象力。 - eis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接