gpt4 book ai didi

c# - 作为代码修复的一部分在类上实现接口(interface)

转载 作者:行者123 更新时间:2023-11-30 20:39:39 27 4
gpt4 key购买 nike

作为 Roslyn 代码修复的一部分,我需要在类上实现一个接口(interface)(如果该类尚未实现该接口(interface))。

到目前为止,我能够检测该类是否实现了该接口(interface):

var implements = false;
foreach (var b in t.BaseList.Types)
{
var name = (b.Type as IdentifierNameSyntax)?.Identifier.ValueText;
if (name == "IInterfaceName")
{
implements = true;
break;
}
}

现在,如果 implements 为 false,我需要将该接口(interface)添加到基本类型列表中。我尝试过 t.BaseTypes.Add(...) ,但在这里我有点卡住了 - 不知道如何构造正确的参数。

这是正确的方法吗?

最佳答案

通过检查底层符号的 AllInterfaces 属性,可以以更优雅的方式检查类声明是否实现接口(interface)。

c.SemanticModel.GetDeclaredSymbol(((ClassDeclarationSyntax)c.Node)).AllInterfaces

在代码修复中,您可以使用 SyntaxFactory 构建新树,然后修改文档以包含新构建的树。请注意,在 Roslyn 中,大多数内容都是不可变的,因此如果您刚开始调用 Add(...),它将返回对象的一个​​新实例,但不会更改文档中的实例。

关于SyntaxFactory的修改,可以引用 RoslynQuoter .

关于c# - 作为代码修复的一部分在类上实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155957/

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