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所提到的,这在官方上是不可能的。但是,通过以下 hack,您可以实现它:

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 开始的 Object 和 Collection Initializers 的语法。

查看 Object 和 Collection Initializers

例子:

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

替代解决方案

您可以使用支持 C# 1.0 到 c#6.0的新 .NET 编译器平台(“Roslyn”) 。

示例包括 ConvertToAutoProperty - 一种代码重构,用于将具有简单 getter 和 setter 的简单属性更改为自动属性。

如果您对 CodeDom 感兴趣 ,可以从 nuget 安装适用于 .NET 编译器平台(“Roslyn”)的新 CodeDOM 提供程序

于 2017-03-07T13:39:53.267 回答
0

不,这是不可能的。自动属性是一种特定于语言的功能,因此您找不到任何生成它们的方法。

于 2012-12-03T08:01:41.440 回答