gpt4 book ai didi

c# - 如何通过 roslyn 检查两种方法是否匹配签名?

转载 作者:行者123 更新时间:2023-12-05 06:05:01 25 4
gpt4 key购买 nike

我正在尝试编写一个分析器来检查方法是否正在实现接口(interface)方法(隐式),如果接口(interface)提供默认实现,则很容易错过。给定类上的潜在方法符号列表并获取该类实现的所有接口(interface)上的所有方法的列表,我正在执行以下操作

classMethods
.Where(methodSymbol => !interfaceMethods
.Any(x =>
x.Name == methodSymbol.Name &&
SymbolEqualityComparer.Default.Equals(x.ReturnType, methodSymbol.ReturnType) &&
x.Parameters.Select(p => p.Type).SequenceEqual(methodSymbol.Parameters.Select(p => p.Type))))

这主要适用于使用泛型的情况,例如以下情况:

        class A : IA
{
public void MethodName<T>(List<T> a) {}
}
interface IA
{
public void MethodName<T>(List<T> a) {}
}

这两种类型从语义模型的角度来看是不同的。有没有办法获取泛型参数数据?我真的更愿意避免退回到语法模型来破译 T 在两者中的意思是一样的。

最佳答案

解决方法如下

classMethods
.Where(methodSymbol => !interfaceMethods
.Select(interfaceMethod => classSymbol.FindImplementationForInterfaceMember(interfaceMethod))
.Any(implementation => SymbolEqualityComparer.Default.Equals(methodSymbol, implementation)))

关于c# - 如何通过 roslyn 检查两种方法是否匹配签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66113790/

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