使用Codedom生成C#自动属性

9

有没有一种方法可以使用Codedom生成C#自动属性或者其他可以使用的库集合?

5个回答

8
您可以使用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);

6

那么还有其他的库可以使用吗? - Hannoun Yassir
@Yassir,创建一个后备字段并在getter/setter中使用它们真的不难。 - chakrit
正如Marc Gravell所说,你需要自己实现这个功能,因为它们只是编译器的技巧(即.NET编译器创建一个私有变量来保存您的自动属性值)。 - Rubens Farias
实际上,我并没有编译生成的代码,而是将其添加到项目中,因此我需要生成的类具有自动属性。 - Hannoun Yassir
1
在这种情况下,您可以使用 CodeSnippetStatement 并硬编码该属性。 - Rubens Farias

2
CodeDom应该是一种类似于抽象语法树的东西,可以转换成多种语言(通常是C#和VB.NET)。因此,在CodeDom中不会找到特定语言的语法糖功能。

1

实际上,关于使用 CodeSnippetStatement 很容易的评论是误导的,因为 CodeTypeDeclaration 没有语句集合,你不能将这些片段添加到其中。


-2
你可以这样做:根据 使用 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);

1
这段代码无法工作,因为它会生成两个空的 setget 方法,从而导致编译错误。CodeSnippetTypeMember(https://dev59.com/JEvSa4cB1Zd3GeqPe4Pk#23876973)是解决方案。 - Mohsen Afshin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接