【发布时间】:2011-01-08 12:47:57
【问题描述】:
有没有办法使用 Codedom 生成 C# 自动属性或也许是我可以使用的另一组库?
【问题讨论】:
标签: c# .net code-generation codedom
有没有办法使用 Codedom 生成 C# 自动属性或也许是我可以使用的另一组库?
【问题讨论】:
标签: c# .net code-generation codedom
不,不是:C# CodeDom Automatic Property
查看this article 以获取一些有用的示例
【讨论】:
CodeSnippetStatement 并对该属性进行硬编码
您可以为此目的使用 CodeSnippetTypeMember 类。
例如:
CodeTypeDeclaration newType = new CodeTypeDeclaration("TestType");
CodeSnippetTypeMember snippet = new CodeSnippetTypeMember();
snippet.Comments.Add(new CodeCommentStatement("this is integer property", true));
snippet.Text="public int IntergerProperty { get; set; }";
newType.Members.Add(snippet);
【讨论】:
CodeDom 应该是某种AST,可以转换为多种语言(通常是 C# 和 VB.NET)。因此,您不会在 CodeDom 中找到属于特定语言语法糖的功能。
【讨论】:
实际上,关于易于使用 CodeSnippetStatement 的 cmets 具有误导性,因为 CodeTypeDeclaration 没有可以将这些 sn-ps 添加到的语句集合。
【讨论】:
你可以这样做:根据How to: Create a Class Using CodeDOM
// Declare the ID Property.
CodeMemberProperty IDProperty = new CodeMemberProperty();
IDProperty.Attributes = MemberAttributes.Public;
IDProperty.Name = "Id";
IDProperty.HasGet = true;
IDProperty.HasSet = true;
IDProperty.Type = new CodeTypeReference(typeof(System.Int16));
IDProperty.Comments.Add(new CodeCommentStatement(
"Id is identity"));
targetClass.Members.Add(IDProperty);
【讨论】:
set 和get 方法,这将导致编译错误。 CodeSnippetTypeMember (stackoverflow.com/a/23876973/191148) 是解决方案