如何使用Visual Studio(和/或ReSharper)从类字段生成构造函数?

15 浏览
0 Comments

如何使用Visual Studio(和/或ReSharper)从类字段生成构造函数?

我已经习惯于许多Java IDE(Eclipse、NetBeans和IntelliJ IDEA)提供了一个命令,根据类中的字段生成默认构造函数。\n例如:\npublic class Example\n{\n public decimal MyNumber { get; set; }\n public string Description { get; set; }\n public int SomeInteger { get; set; }\n // ↓↓↓ 这是我想要生成的 ↓↓↓\n public Example(decimal myNumber, string description, int someInteger)\n {\n MyNumber = myNumber;\n Description = description;\n SomeInteger = someInteger;\n }\n}\n在大多数面向对象编程语言中,使用构造函数填充对象的所有字段是一个非常常见的任务,我假设在C#中有一些方法可以节省编写这些样板代码的时间。我是否对语言有一些基本的误解?在Visual Studio中是否有一些明显的选项?

0
0 Comments

问题出现的原因是在Visual Studio 2010中添加了一个名为“generate from usage”的新功能,目的是根据使用模式生成标准代码。其中一个功能是根据初始化模式生成构造函数。

这个功能可以通过智能标签来访问,当检测到模式时会出现智能标签。例如,假设我有以下类:

class MyType { 
}

然后我在我的应用程序中写下以下代码:

var v1 = new MyType(42);

由于不存在接受一个整数参数的构造函数,所以会出现一个智能标签,其中一个选项是“生成构造函数桩”。选择该选项后,将修改MyType的代码如下所示:

class MyType {
    private int p;
    public MyType(int p) {
        // TODO: Complete member initialization
        this.p = p;
    }
}

解决方法是使用智能标签中的“生成构造函数桩”选项来生成构造函数代码。

0
0 Comments

问题的原因是用户想要通过使用Visual Studio(和/或ReSharper)从类字段生成构造函数。用户想知道是否有一种方法可以自动生成构造函数,以便初始化所有字段。

解决方法是使用ReSharper的"Generate Constructor"工具。用户可以使用"Alt" + "Ins"热键来访问该工具。该工具允许用户选择要初始化的任何字段/属性。

然而,对于VS2010,它没有直接支持自动生成构造函数的功能。但是,VS2010添加了一个名为"Generate from usage"的工具。当用户尝试使用与现有构造函数不匹配的签名实例化类时,它会提示用户生成该构造函数。

但是需要注意的是,ReSharper并非免费使用的工具。

通过使用ReSharper的"Generate Constructor"工具可以生成构造函数,并通过使用"Alt" + "Ins"热键来访问该工具。对于VS2010,可以使用"Generate from usage"工具来生成构造函数。然而,需要注意的是,ReSharper并非免费使用的工具。

0
0 Comments

在使用Visual Studio(和/或ReSharper)时,如何从类字段生成构造函数?

在Visual Studio 2015 Update3中,我有这个功能。

只需将属性高亮显示,然后按下Ctrl + .,然后按下Generate Constructor

例如,如果你选择了两个属性,它会建议你创建一个带有两个参数的构造函数,如果你选择了三个属性,它会建议一个带有三个参数的构造函数,以此类推。

在Visual Studio 2017和2019中也可以使用。

[![Auto generate shortcut visualisation](https://i.stack.imgur.com/7dTr6.png)](https://i.stack.imgur.com/7dTr6.png)

嘿,在Visual Studio 2015社区版中,这对我有效。不确定为什么这个功能不是很出名,但这很好。谢谢。:)

太完美了。如果我在你发布这个问题的那一天看到它的话,这个功能可以节省多少工作量... xD

值得一提的是,如果你使用C# 6只读属性(例如,public int Age { get; }),则不会弹出该功能。它们需要指定setter,即使是临时的,该选项才可用。在VS2015 Community中进行了测试;不确定是否在VS2017中修复了此问题。

当你没有setter时,你怎么在构造函数中使用它呢?你应该使用底层属性

:在C# 6.0中,只读自动属性可以在构造函数中赋值。请参阅此处的示例:github.com/dotnet/roslyn/wiki/…

它在属性上方生成构造函数。是否可能将其设置为在属性下方生成构造函数?

很抱歉,我没有找到任何方法来实现这一点

如果可以更新为选中的答案,那就太好了。我差点开始研究如何获取ReSharper。ReSharper很好,但简单就是美。总是向下滚动并检查时间戳!

这是完美的解决方案!我会将其标记为真正的解决方案!

太棒了!我怎么生成一个无参构造函数?

你可以使用"ctor"代码片段。只需编写ctor然后按两次Tab键。

对于Mac OS(尽管找不到快捷键..):高亮显示属性-->右键单击-->快速修复-->生成构造函数

真是个省时的工具,耶!

这应该是答案,而不是购买Resharper。我不能相信在过去的5年里,我一直手动编写大型构造函数时根本不需要这样做。啊!

在VS2019中有效。

0