【问题标题】:Shortcut to instantiate an object in Visual Studio在 Visual Studio 中实例化对象的快捷方式
【发布时间】:2018-07-05 23:35:45
【问题描述】:

我有一个类有8个以上的属性,我经常想用某种方法来实例化它,但是要一个一个地写属性给它们赋值是超级繁琐的。

有没有什么办法可以插入一种“代码片段”用键盘快捷键,让我插入类的实例,我只需要修改值来添加?

我不想使用构造函数,因为我希望实例对我的代码的读者来说是可读的,并且构造函数在 LinQ to SQL 中不起作用。

我使用 Visual Studio 2015、C#、Resharper。

非常感谢。

【问题讨论】:

  • 您正在寻找代码片段。

标签: c# visual-studio-2015 resharper


【解决方案1】:

如果你是这样初始化的:

  var example = new Example()
    {
        ...
    };

然后您可以使用 Ctrl-Space,它会继续为您提供尚未设置的自动完成属性。

【讨论】:

  • 是的,我知道,但是我想知道有没有捷径可以让你自动把它们都放进去,那些属性的值可能是用默认值填充的,就是这样当我们需要实例化具有太多属性的类时变得乏味。
  • 如果没有在 ReSharper 中使用宏,那我猜很抱歉。
  • @HenryGuillen17 你有没有找到用默认值实现所有属性的实例化类对象的解决方案???
  • 不,但我认为这很容易。
【解决方案2】:

我为Visual Commander 扩展创建了Generate an initializer for a new object with names of public properties and fields 命令。输入类名后调用它会生成一个初始化器:

【讨论】:

  • 它看起来很不错,但请原谅我的无知:它适用于 VS 2015? VS2015如何安装?谢谢。
  • 1.安装可视化指挥官。 2. 添加新命令(VCmd - 命令 - 添加)。 3.选择C#语言,复制粘贴引用,复制粘贴代码。 4. 点击保存。
  • 我还在努力使用这个,我需要设置一个快捷键吗?此外,这似乎不包括父类的属性。
  • @PLopes 您可以指定快捷键或从 VCmd 菜单调用命令。在 GetMembersForInitialization 我使用 type.GetMembers() 不包括父母。可能调用 GetMembers(BindingFlags.FlattenHierarchy) 将包括它们。
  • @RichC 我已经修复了网站代码中未转义的尖括号。
【解决方案3】:

据我所知,没有内置方法可以生成具有对象所有属性的实例化器。通常,当你必须这样做时,你会通过一个构造函数,这样你就知道对象被正确地创建了。

您可以在 Visual Studio 中创建某种类型的代码 sn-p,但您必须自己制作,而且它只适用于该对象......

您也可以查看此帖子,因为它与您要查找的内容非常接近,但听起来他们也没有找到这样做的好方法:Is there a way, at design time, to initialize an object with all properties in Visual Studio 2010?

【讨论】:

  • 然后我必须为 VS 创建一个宏,允许我插入该对象。理想的方式是它可以支持所有对象。
  • 确实,必须为每个对象都这样做确实有点糟糕。我认为这就是为什么大多数人要么使用实例化器并填写他们需要的字段,要么为接受所有需要的字段的对象创建一个构造函数。
  • 我不得不辞职手动做,只是我不能使用Linq To SQL的构造函数;也感谢您的帮助
【解决方案4】:

您可以创建自定义代码sn -p,格式如下:

<?xml version="1.0" encoding="utf-8" ?> <CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <Header> <Title>Create instance of my class</Title> <Author>Author</Author> <Shortcut>ShortCut (then press tab tab)</Shortcut> <-- Put your snippet <Description>Description</Description> <SnippetTypes> <SnippetType>SurroundsWith</SnippetType> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>message</ID> <Default>my function</Default> </Literal> </Declarations> <Code Language="CSharp"> <![CDATA[ var myclass = new MyClass() { Property1 = 1, Property2 = 2 }; ]]> </Code> </Snippet> </CodeSnippet>

您可以将其保存在 Nodepad 中,并且您必须以 .snippet 扩展名保存此文件。寻找文件夹..Visual Studio 2017\Code Snippets\Visual C#\My Code Snippets
当你准备好打开VS并进入Tools -&gt; Code Snippet Manager并选择Language CSharp然后从我的代码片段文件夹中选择你的sn-p,你应该准备好使用它了

【讨论】:

  • 这个想法非常好,但是检测到对象的东西是可能的,它会映射所有属性并为其分配默认值:示例:示例:var object = new Object {Id = 0, Value = "", otherObject = null }
猜你喜欢
  • 2010-09-06
  • 2021-08-31
  • 1970-01-01
  • 2021-12-15
  • 2015-12-02
  • 1970-01-01
  • 2012-02-19
  • 2014-09-26
  • 2020-01-16
相关资源
最近更新 更多