1

有时我想手动设置一个对象。我的一些类相当复杂,可能有 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 ...”时,智能感知似乎不太好。我正在考虑复制粘贴,然后再重新设置以提供帮助,但我想我会在走这条路之前先问一下。

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

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

4

3 回答 3

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
            }
    }
于 2012-08-19T07:20:04.023 回答
0

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

someobject [标签] [标签]

例如,将代码段放入

..\Documents\Visual Studio 2010\代码片段\Visual C#\我的代码片段

<?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>
于 2012-08-19T07:22:11.873 回答
0

当您有 LARGE 类时,我想这样做的唯一方法是复制该类,然后查找并替换花括号内的信息,\{.*?\}并替换为= , \n\r(在 NotePad++ 中),如评论中所述。然后我手动替换internal stringor internal intetc 并填写我的值。它既不理想也不优雅,但我已经接受了没有工具可以做到这一点的事实。

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

    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; }    }

     }

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

同样,请记住,这是为大型课程设计的 - 而不是上面的课程!
如果有人能想到更好的方法,我很乐意重新分配答案!

[编辑] = VS2012 之前,您应该使用“{.@}”进行上述搜索。看到这个问题

于 2012-10-22T20:48:08.960 回答