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

コードスニペットを使用できます。ただし、これは一度手動で作成する必要があります。たとえば、以下のスニペットを使用して、次のように入力して新しいオブジェクトを作成できます。

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>
于 2012-08-19T07:22:11.873 に答える
0

LARGEクラスがある場合にこれを行うために私が考えた唯一の方法は、クラスをコピーしてから、中括弧内の情報を見つけて置換し、コメントに記載されているように(NotePad ++で)\{.*?\}置換することです。次に、 orなどを手動で何も= , \n\r置き換えずに値を入力します。それは理想的でもエレガントでもありませんが、それを行うためのツールがないという事実に私はただ辞任しました。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より前では、上記の検索を行うには「{。@}」を使用する必要があります。この質問を参照してください

于 2012-10-22T20:48:08.960 に答える
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 に答える