【问题标题】:Is there a ToString() generator available in Visual Studio 2010?Visual Studio 2010 中是否有可用的 ToString() 生成器?
【发布时间】:2011-02-08 10:53:32
【问题描述】:

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

我真的不想手动做这个!

[编辑]

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

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

默认情况下似乎不是 - 感谢您的回复!

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

【问题讨论】:

  • 在什么基础上生成字符串表示?
  • ReSharper 里有,我没有用户 VS 没有它,所以我真的不知道有没有;)
  • 您的意思是override?如果是这样,那么只需输入override,空格并从列表中选择ToString - 它会为您生成方法体。
  • @lainie,我支持你。我们都在寻找像 Eclipse 这样的愚蠢简单的 ToString 生成器:wiki.eclipse.org/ToString()_generation。我认为没有太多 .NET 人熟悉这种功能。
  • 很遗憾VS2010即使是第一个版本也没有IntelliJ IDEA那么聪明。也许是因为覆盖 ToString() 在 .NET 中不像在 Java 中那么流行。

标签: c# visual-studio-2010


【解决方案1】:

Resharper 通过生成“格式化成员”来支持这一点

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

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

alt + insert -> Formatting Members

我确认这在 Resharper 8 中可用。

【讨论】:

  • 就在您认为自己找到了 ReSharper 无法帮助您解决的问题时...
【解决方案2】:

使用反射,您实际上可以编写一个 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();
}

【讨论】:

  • Uggg 反射和应用程序性能。 ToString 方法应该尽可能快地执行。
【解决方案3】:

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

【讨论】:

  • 我认为这是一个很好的建议,并给了它一个赞成票。但是,请注意任何试图从 VB 而不是 C# 执行此操作的人:stackoverflow.com/q/35092412/165164
【解决方案4】:

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

好好看看如何创建 sn-ps with replacement。您可以创建非常通用的结构。

【讨论】:

  • 我不知道为什么这个解决方案被接受了。它充其量提供了切向相关的信息。片段无权执行 OP 要求的操作。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    它在 VS 上不存在,但它在 ReSharper plugin 上存在,如果您不想自己实现它。该插件是商业的,但我个人认为它物有所值。

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

    【讨论】:

    • alt+ins -> 格式化成员还在 R# 7.1 中生成 ToString。 ReSharper 是不可或缺的工具。
    【解决方案7】:

    也许你应该看看AutoCode 4.0。它是一个 Visual Studio 扩展,它会带来一些 sn-ps。

    例如,您可以在类中的某处简单地编写 tostr 并按 Ctrl+Enter,它会自动生成连接所有公共属性的 ToString() 方法类的。

    【讨论】:

    • 但希望有一个 VS 2013 :-(
    【解决方案8】:

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

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

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

    【讨论】:

      【解决方案9】:

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

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

      【讨论】:

      • Eclipse 和 NetBeans 提供了本地变量的转储,我认为这正是她所要求的。我来到这个帖子寻找相同的答案。
      • 还有 IntelliJ。 Visual Shitio 像往常一样 - 落后 10 年。
      【解决方案10】:

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

      【讨论】:

      • 您似乎没有抓住重点。 Lainie 询问 VS 是否会像 Eclipse 和 NetBeans 那样自动生成方法。您不能总是依赖调试器,能够将对象的状态转储到日志是必不可少的。
      【解决方案11】:

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

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

      【讨论】:

      • 你甚至不必写public。如果您从 override 开始并从下拉列表中选择 ToString 方法,则会自动添加 public。
      • "只有我能想象到的"... 像 Eclipse 那样打印出来的局部变量怎么样?我不认为这会超出想象。
      猜你喜欢
      • 2011-04-17
      • 2011-04-12
      • 1970-01-01
      • 2011-02-26
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多