【问题标题】:Autogenerating constructors which just initialize the fields to the passed params?自动生成将字段初始化为传递参数的构造函数?
【发布时间】:2011-01-13 18:02:48
【问题描述】:

有没有办法在 Visual Studio 中为这个类自动生成明显的 2 参数构造函数?

class Thing {
  public readonly string a;
  public readonly Object b;
}

我猜你应该使用:

new Thing { a = ..., b = ... }

在这种情况下的语法,但这不适用于上面的只读字段。拥有构造函数的另一个好处是你不会忘记一个字段。

【问题讨论】:

    标签: c# visual-studio code-generation


    【解决方案1】:

    有,Resharper 支持此功能。你选择“生成构造函数”,选择你想要包含的字段,你就得到了你的构造函数。

    【讨论】:

    • 选择这个作为答案,因为这是我最终做的,尽管其他建议也很好:)
    【解决方案2】:

    抱歉,我的帖子一点帮助都没有,但我无法抗拒。

    恐怕通过使用 T4 模板之类的东西,您(可能)会失去 IntelliSense,这可能不是您想要付出的代价。您可能可以编写一个 VS.NET 宏来自动生成构造函数的代码(我相信代码模型应该为您提供足够的信息来做到这一点)。

    现在,这是帖子中无用的部分 - 如果您对 C# 不必要的冗长感到恼火,也许您可​​以尝试另一种 .NET 语言。在 F# 中,您可以编写隐式构造函数,并且它们的参数自动成为(只读)字段:

    type Thing(a:string, b:Object) = 
      // members can use 'a' and 'b' directly - here is one example:
      member this.GetInfo() = 
        "Some info: " + a + (b.ToString())
    

    在实际场景中,您可能不需要指定类型,因为 F# 可以根据以后的使用情况自动推断它们。如果您已经熟悉 .NET 库,那么使用 F# 进行试验并不困难。

    【讨论】:

    • 对不起这里的文字墙;不知何故,这里忽略了段落。你一针见血,我喜欢函数式编程;) Haskell 让我养成了将几乎所有非性能关键的只读的东西都设为只读的习惯。还没有看过 F#,但也许我应该找出我正在编写代码的人是否可以接受 F#(我猜担心与 Haskell 相同,尽管可能不那么严重:他们不会找其他会说它的程序员)。 C# 在 FP 方面并不是那么糟糕,尽管我缺少 sum 类型。
    • 有各种免费产品为 T4 提供智能感知。例如Tangible Engineering 的 T4 编辑器
    • @FunctorSalad:当我看到你的昵称时,我以为你知道 Haskell :-)。我想我的回答可能对仍然主要生活在 C# 世界并遇到这个问题的其他人有用。我同意 C# 有很多函数式能力(毕竟,我写了一本关于 C# 和 F# 函数式编程的书)。总和类型和模式匹配肯定会很好。
    【解决方案3】:

    您可能想查看 T4 模板。编写一个模板来迭代只读属性名称和类型的列表并为属性和构造函数创建必要的代码是相当简单的。

    T4 模板内置于 Visual Studio。查看 Scott Hanselman 的 blog 关于 T4 模板的更多详细信息。

    还有其他产品可以自动进行这种重构。 Resharper 就是其中之一,但它不是免费的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 2019-09-25
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多