c# - Roslyn 检查属性的类型

标签 c# linq roslyn

我正在尝试找出在 Roslyn 中比较属性数据的正确方法。

static bool ResolveAttributes(IMethodSymbol methodSymbol)
{
    var attributes = methodSymbol.GetAttributes();

    return null == attributes.FirstOrDefault(attr => isIDEMessageAttribute(attr, typeof(MyAttributeType)));
}

static bool IsIDEMessageAttribute(AttributeData attribute, Type desiredAttributeType)
{
    //How can I check if the attribute is the type of desired?
}

如何检查属性是否是所需的类型?

最佳答案

AttributeData.AttributeClass 为您提供属性的 Roslyn 符号。但是您有一个 CLR 运行时类型,您正试图与之进行比较。您可以只比较类型名称等,看看它们是否可能是同一类型,或者获取 MyAttributeType 的 Roslyn 类型符号,后者更正确。这通常是通过

var desiredSymbol = sematicModel.Compilation.GetTypeByMetadataName(typeof(MyAttributeType).FullName)

关于c# - Roslyn 检查属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45381039/

相关文章:

c# - 使用 LINQ ExpressionVisitor 将原始参数替换为 lambda 表达式中的属性引用

c# - 如何使用 LINQ 对从文件加载的数据进行排序

c# - 为什么这段代码不能在 .NET 4.0 的 VS2010 中编译?

c# - ObjectCreationExpressionSyntax.Type 的 SemanticModel.GetTypeInfo() 返回 null

asp.net - 如何在我的 vnext 应用程序中启用 roslyn 自动构建

C# 反序列化带有重复标签的 XML

c# - 检测是否以具有或不具有提升权限的管理员身份运行?

c# - 我可以停止 IIS 吗?

c# - 如何创建使用 Ssl3 而不是 Tls 的 SSLStream

visual-studio-2017 - dotnet build 不显示 Visual Studio 所显示的 StyleCop 警告