如何在c#中使用CODEDOM生成空的get&set语句

sum*_*man 9 c#-4.0

目前我所拥有的代码是生成类似的属性

private int integerProperty  
         { 
            get  
            { 
                return integerField; 
            }
            set  
            { 
                integerField = value; 
            } 
        } 
Run Code Online (Sandbox Code Playgroud)

我希望这些属性很简单......

private int integerProperty  
         { 
            get;              
            set; 
         } 
Run Code Online (Sandbox Code Playgroud)

我和我的代码是

 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);
Run Code Online (Sandbox Code Playgroud)

有人请帮忙.提前致谢.

Wou*_*ort 13

正如Botz3000所说,这是正式的不可能.但是,通过以下hack,您可以实现它:

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

  field.Name += " { get; set; }";
Run Code Online (Sandbox Code Playgroud)

通过附加{ get; set; }到字段名称,它将在实际源代码中生成属性.

  • 嗨Wouter,代码工作得很好..但它最后添加了一个分号(;).. public class Sample {public int ID {get; 组; }; public string Name {get; 组; }; public string Domain {get; 组; }; 请注意,在属性的末尾,你可以找到一个分号. (2认同)
  • 解决方法是键入: field.Name += " { get; set; }//" '//' 导致额外的分号被注释掉。 (2认同)