目前我所拥有的代码正在生成像
这样的属性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);
任何人都请帮忙。提前谢谢。
答案 0 :(得分:13)
正如Botz3000所说,它正式无法实现。但是,通过以下hack,您可以实现它:
var field = new CodeMemberField
{
Attributes = MemberAttributes.Public | MemberAttributes.Final,
Name = "MyProperty",
Type = new CodeTypeReference(typeof(MyType)),
};
field.Name += " { get; set; }";
通过将{ get; set; }
附加到字段名称,它将在实际源代码中生成一个属性。
答案 1 :(得分:0)
不,这是不可能的。自动属性是特定于语言的功能,因此您无法找到生成这些属性的任何方法。
答案 2 :(得分:0)
这是一个古老的问题,但值得注意的是" @Serguei Fedorov"不再适用(它仅适用于c#1.0到c#2.0)
替换"};"的解决方案用"}"应该避免,因为"};"用于从C#3.0开始的Object和Collection Initializers的语法。
回顾Object and Collection Initializers。
示例:
var pet = new { Age = 10, Name = "Fluffy" }; //it's ended by "};"
替代解决方案
您可以使用支持C#1.0到c#6.0的the new .NET Compiler Platform ("Roslyn") 。
samples 包括ConvertToAutoProperty - 一个代码重构,用于将一个简单的getter和setter更改为一个简单的属性为auto属性。
如果您对CodeDom感兴趣,可以从nuget安装新的CodeDOM Providers for .NET Compiler Platform (“Roslyn”)