下面的代碼將創建您提供的屬性定義。
有一點要注意的是,自動屬性(get; set;
)是由C#編譯器提供的syntactic sugar,不能由CodeDOM生成。要創建一個屬性,您需要以傳統方式提供支持字段。
回答你的問題的關鍵是CodeAttributeDeclaration
類。
const string fieldName = "_d3";
// Create the backing field for the property.
var field = new CodeMemberField(typeof(string), fieldName);
// Create the property.
var prop = new CodeMemberProperty();
prop.Attributes = MemberAttributes.Public | MemberAttributes.Final; // Public, non-virtual.
prop.Name = "d3";
prop.Type = new CodeTypeReference(typeof(string));
prop.GetStatements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(fieldName)));
prop.SetStatements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression(fieldName), new CodeVariableReferenceExpression("value")));
// Create the attribute declaration for the property.
var attr = new CodeAttributeDeclaration(new CodeTypeReference(typeof(System.ComponentModel.DataAnnotations.RangeAttribute)));
attr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(typeof(decimal))));
attr.Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression("-922337203685477.5808")));
attr.Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression("922337203685477.5807")));
attr.Arguments.Add(new CodeAttributeArgument("ErrorMessage", new CodePrimitiveExpression("")));
prop.CustomAttributes.Add(attr);
// Create a class to contain the property.
var testClass = new CodeTypeDeclaration("TestClass");
testClass.Members.Add(field); // Add the backing field.
testClass.Members.Add(prop); // Add the property.
執行該代碼將導致您的屬性在code
變量(包裝在一個測試類)的產生。
string code;
using (var provider = CodeDomProvider.CreateProvider("CSharp"))
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
{
provider.GenerateCodeFromType(testClass, writer, new CodeGeneratorOptions() { BracingStyle = "C" });
writer.Flush();
stream.Position = 0;
code = reader.ReadToEnd();
}
內容的code
變量:
public class TestClass
{
private string _d3;
[System.ComponentModel.DataAnnotations.RangeAttribute(typeof(decimal), "-922337203685477.5808", "922337203685477.5807", ErrorMessage="")]
public string d3
{
get
{
return _d3;
}
set
{
_d3 = value;
}
}
}
如果問題是剛開應用屬性,這裏是代碼爲我們做編輯的休息嗎? –