gpt4 book ai didi

c# - 如何使用 Roslyn 创建基于结构的属性

转载 作者:行者123 更新时间:2023-11-30 21:47:40 28 4
gpt4 key购买 nike

我有以下代码来生成属性:

类型:

types = new Dictionary<string, SpecialType>();
types.Add("Guid", SpecialType.System_Object);
types.Add("DateTime", SpecialType.System_DateTime);
types.Add("String", SpecialType.System_String);
types.Add("Int32", SpecialType.System_Int32);
types.Add("Boolean", SpecialType.System_Boolean);

generator.PropertyDeclaration(name, generator.TypeExpression(types["DateTime"]), Accessibility.Public);

但是,当结构类型的名称是参数时(例如 DateTimeGuid - 对于 Guid,我什至找不到适当的特殊类型):

Unsupported SpecialType

  at: Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpSyntaxGenerator.TypeExpression(SpecialType specialType)
at: MyProject.CreateProperty(String name, String type)

我应该使用什么?

最佳答案

您可以根据类型的名称创建属性,因此您可以使用如下代码创建 DateTime 和 Guid 属性

// Create an auto-property
var idProperty =
SyntaxFactory.PropertyDeclaration(
SyntaxFactory.ParseTypeName("Guid"),
"Id"
)
.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
.AddAccessorListAccessors(
SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))
);

// Create a read-only property, using a backing field
var createdAtProperty =
SyntaxFactory.PropertyDeclaration(
SyntaxFactory.ParseTypeName("DateTime"),
"CreatedAt"
)
.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
.AddAccessorListAccessors(
SyntaxFactory.AccessorDeclaration(
SyntaxKind.GetAccessorDeclaration,
SyntaxFactory.Block(
SyntaxFactory.List(new[] {
SyntaxFactory.ReturnStatement(SyntaxFactory.IdentifierName("_createdAt"))
})
)
)
);

如果我错过了一些明显的东西,这意味着您不能使用这种语法,请您编辑您的答案并包含一个可执行的最小重现案例吗?

(我注意到您示例中的“PropertyDeclaration”方法指定了参数名称、类型、可访问性,这些参数不对应于 SyntaxFactory 类上的任何“PropertyDeclaration”方法签名 - 是您编写的第一个方法 然后调用SyntaxFactory方法?)

关于c# - 如何使用 Roslyn 创建基于结构的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com