9

現在、私が持っているコードは次のようなプロパティを生成しています

private int integerProperty  
         { 
            get  
            { 
                return integerField; 
            }
            set  
            { 
                integerField = value; 
            } 
        } 

プロパティを次のようにシンプルにしたかった...

private int integerProperty  
         { 
            get;              
            set; 
         } 

私が持っているコードは

 CodeMemberProperty property1 = new CodeMemberProperty();
        property1.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "integerField")));
        property1.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "integerField"),new CodePropertySetValueReferenceExpression()));
        type1.Members.Add(property1);

誰でも助けてください。前もって感謝します。

4

3 に答える 3

16

Botz3000が述べたように、それは公式には不可能です。ただし、次のハックを使用して実装できます。

var field = new CodeMemberField
  {
      Attributes = MemberAttributes.Public | MemberAttributes.Final,
      Name = "MyProperty",
      Type = new CodeTypeReference(typeof(MyType)),
  };

  field.Name += " { get; set; }";

フィールド名に追加{ get; set; }することで、実際のソースコードにプロパティを生成します。

于 2012-12-03T08:08:38.590 に答える
1

これは古い質問ですが、「@Serguei Fedorov」による回答が適用されなくなったことは注目に値します (c# 1.0 から c# 2.0 でのみ有効です)。

「};」を置き換える解決策 "}" は避けるべきです。"};" C# 3.0 以降のオブジェクトおよびコレクション初期化子の構文に使用されます。

オブジェクトとコレクションの初期化子を確認します 。

例:

 var pet = new { Age = 10, Name = "Fluffy" };  //it's ended by "};"

代替ソリューション

C# 1.0 から c#6.0 をサポートする新しい .NET Compiler Platform ("Roslyn")を使用できます。

サンプルには、ConvertToAutoProperty が含まれています。単純なゲッターとセッターを使用して単純なプロパティを自動プロパティに変更するためのコード リファクタリングです。

CodeDom に興味がある場合は、 nuget からインストールできる.NET Compiler Platform (“Roslyn”) 用の新しい CodeDOM Providers があります。

于 2017-03-07T13:39:53.267 に答える
0

いいえ、できません。自動プロパティは言語固有の機能であるため、それらを生成する方法はありません。

于 2012-12-03T08:01:41.440 に答える