【问题标题】:Tell resharper to generate ToString in C# using string.Format?告诉 resharper 在 C# 中使用 string.Format 生成 ToString?
【发布时间】:2016-01-19 13:43:50
【问题描述】:

目前 resharper 正在使用字符串插值(即$"Member: {Member}")在 C# 中生成 ToString。

是否可以修改它,使其使用string.Format 代替(即string.Format("Member: {0}",Member))

【问题讨论】:

  • 字符串插值是 C# 6 的一项功能。您是否希望在项目中禁用 C# 6 支持? That question 之前已解决。
  • 也许这会有所帮助:ReSharper -> 管理选项 -> 代码版 -> C# -> 上下文操作 -> 禁用“转换为常规字符串插值”启用“转换为 string.Format”
  • 我只是想使用 string.Format 生成 ToString,我不想完全禁用 C# 6

标签: c# resharper


【解决方案1】:

ReSharper > 选项 > 代码检查 + 检查严重性 > C# > “语言使用机会” > “使用字符串插值表达式”。将此更改为“不显示”。

【讨论】:

  • 它没有帮助 - 它只是阻止 resharper 在 string.Format 上显示警告,但它仍然使用字符串插值生成 ToString。
【解决方案2】:

我刚刚在 Resharper 2016.1 中偶然发现了同样的问题

对我来说,它有助于将插入符号定位在字符串连接中的 + 运算符上并点击 Alt+Enter。然后它列出了重构为 string.Format 的选项。将插入符号定位在字符串上不起作用。在这种情况下,该选项将不可用。

这一定是最近的更改,因为出于本地化原因,我经常使用该重构。

【讨论】:

    【解决方案3】:

    可能值得一试 Fody.ToString 项目,它可以在使用 IL Weaving 构建后自动创建 ToString 方法的重载:

    您的代码:

    [ToString]
    class TestClass
    {
        public int Foo { get; set; }
    
        public double Bar { get; set; }
    
        [IgnoreDuringToString]
        public string Baz { get; set; }
    }
    

    转换为:

    class TestClass
    {
        public int Foo { get; set; }
    
        public double Bar { get; set; }
    
        public string Baz { get; set; }
    
        public override string ToString()
        {
            return string.Format(
                CultureInfo.InvariantCulture, 
                "{{T: TestClass, Foo: {0}, Bar: {1}}}",
                this.Foo,
                this.Bar);
        }
    }
    

    检查一下,节省时间 - https://github.com/Fody/ToString

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多