是否存在从类描述中实例化类的工具?

时间:2012-08-19 06:57:17

标签: c# visual-studio-2010

我想不时地手动设置一个对象。我的一些课程相当复杂,可能有14个或更多变量。 VS2010或其他地方是否有可以进行类描述并将其转换为构造对象的工具?

我理解这可能没有意义,所以请按照以下简化示例进行操作:

internal class MyObject
{
    internal string Description { get; set; }
    internal int Stock { get; set; }
    internal int DaysSinceLastCount { get; set; }
    internal double TotalValue { get; set; }
    internal bool IsUpToDate { get; set; }

    internal bool IsUnableToBeSet
    {
        get { return Stock==5; }
    }
}

现在,通常,如果我想以手动方式构建它来进行测试,我会做这样的事情:

    MyObject myObject = new MyObject
        {
            Description = "my description",
            Stock = 7,
            DaysSinceLastCount = 10,
            TotalValue = 1000.10,
            IsUpToDate= true;
        };

我的问题是,对于大班,我发现自己花了很多时间打字 - 有更简单的方法吗?是否有一些尚未发现的Visual Studio功能知道如何自动创建对象。当我输入“MyObject myObject = new ...”时,intellisense似乎不太过分。我正在考虑复制粘贴然后重新开始帮助,但我想在走向那条路之前我会问。

    EDIT: resex \{.*?\} and replace with =, to help build may be an option

有一些SO主题需要构建构造函数,但我不确定是否有太多的上述内容。谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

所以你需要用任何随机数据来测试类。为什么不使用带有bool参数的构造函数..

internal class MyObject
    {
        internal string Description { get; set; }
        internal int Stock { get; set; }
        internal int DaysSinceLastCount { get; set; }
        internal double TotalValue { get; set; }
        internal bool IsUpToDate { get; set; }
        internal bool IsUnableToBeSet
        {
            get { return Stock==5; }
        }
        public MyObject(bool isTest)
        {
             if(isTest==true)
             {
            Description=this.GetHashCode().ToString();
            Stock=new Random().Next();
            DaysSinceLastCount=new Random().Next();
            TotalValue=new Random().Next();
            IsUpToDate=true;
         }
             else
             //do nothing
            }
    }

答案 1 :(得分:0)

您可以使用代码段。但是,您必须手动编写一次。例如,使用下面的代码段,我可以通过输入以下内容创建一个新对象:

someobject [tab] [tab]

将代码段放在例如

.. \ Documents \ Visual Studio 2010 \ Code Snippets \ Visual C#\ My Code Snippets

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>
        New Object
      </Title>
      <Shortcut>someobject</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>InstanceName</ID>
          <ToolTip>Name of the instance</ToolTip>
          <Default>myObject</Default>
          <Type>System.String</Type>
        </Literal>
        <Literal>
          <ID>Name</ID>
          <ToolTip>Name property</ToolTip>
          <Default>Name</Default>
          <Type>System.String</Type>
        </Literal>
        <Literal>
          <ID>Value</ID>
          <ToolTip>Value property</ToolTip>
          <Default>Value</Default>
          <Type>System.String</Type>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[var $InstanceName$ = new MyObject
            {
                Name = "$Name$",
                Value = "$Value$"
            };]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

答案 2 :(得分:0)

当你有LARGE类时,我想要做的唯一方法是复制类,然后查找并替换花括号\{.*?\}内的信息并替换为= , \n\r(在NotePad ++中)如评论中所述。然后我手动替换internal stringinternal int等,并填写我的值。这不是理想或优雅,但我只是因为没有工具可以做到这一点。

如果我像这样格式化我的课程会有所帮助:

    internal class MyObject
    {
      internal string Description { get; set; }
      internal int Stock { get; set; }
      internal int DaysSinceLastCount { get; set; }
      internal double TotalValue { get; set; }
      internal bool IsUpToDate { get; set; }
      internal bool IsUnableToBeSet    {        get { return Stock==5; }    }

     }

因为这有助于正则表达式拿起最后一个{},即使我必须删除它,因为没有设置。

再次,请记住,这是为了为LARGE类而设计的 - 而不是上面的那个! 如果有人能想到更好的方式,我会很乐意重新分配答案!

[编辑] =在VS2012之前,您应该使用“{。@}”进行上述搜索。 See this question