- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
罗斯林有 ISymbol
与各种有用的方法接口(interface)。我正在尝试通过 ISymbol.GetAttributes
获取所有类属性.这是一个文档链接:
https://docs.microsoft.com/de-de/dotnet/api/microsoft.codeanalysis.isymbol.getattributes?view=roslyn-dotnet
正如我们所看到的,没有指示此方法是否返回继承的属性(来自基类的属性)。所以这是第一个问题。
第二个问题 - 为什么文档中没有提到这一点?
最佳答案
我不知道为什么文档中没有提到它,我认为应该在那里提到它。
由于我面临同样的问题,我对其进行了测试,它会不返回继承的属性 .您可以使用这些扩展方法来获取所有属性,包括继承的属性:
public static IEnumerable<AttributeData> GetAttributesWithInherited(this INamedTypeSymbol typeSymbol) {
foreach (var attribute in typeSymbol.GetAttributes()) {
yield return attribute;
}
var baseType = typeSymbol.BaseType;
while (baseType != null) {
foreach (var attribute in baseType.GetAttributes()) {
if (IsInherited(attribute)) {
yield return attribute;
}
}
baseType = baseType.BaseType;
}
}
private static bool IsInherited(this AttributeData attribute) {
if (attribute.AttributeClass == null) {
return false;
}
foreach (var attributeAttribute in attribute.AttributeClass.GetAttributes()) {
var @class = attributeAttribute.AttributeClass;
if (@class != null && @class.Name == nameof(AttributeUsageAttribute) &&
@class.ContainingNamespace?.Name == "System") {
foreach (var kvp in attributeAttribute.NamedArguments) {
if (kvp.Key == nameof(AttributeUsageAttribute.Inherited)) {
return (bool) kvp.Value.Value!;
}
}
// Default value of Inherited is true
return true;
}
}
return false;
}
关于Roslyn:是 ISymbol.GetAttributes 返回继承的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523130/
DeclaringSyntaxReferences 之间有什么区别?属性(property)和Locations ISyntax 中的属性(property)界面? 最佳答案 答案的线索在 中评论区
罗斯林有 ISymbol与各种有用的方法接口(interface)。我正在尝试通过 ISymbol.GetAttributes 获取所有类属性.这是一个文档链接: https://docs.micro
给定一个 SemanticModel 实例和一个与之关联的 ISymbol ,是否有可能获得 ISymbol 的 SyntaxNode >? 基本上与 SemanticModel 的 GetDecla
我最近开始学习 Roslyn 代码分析。我浏览了提供的示例代码。我的问题如下: 有没有办法获取从引用库加载的符号的 XML 文档注释? 我使用的示例代码是FAQ(7)。目标是获取文档注释,比方说,Co
只是好奇,我注意到在 Roslyn 中对符号进行字符串化时,似乎有两种方法可以做同样的事情。您可以: // symbol is type ISymbol var symbolText = symbol
我是一名优秀的程序员,十分优秀!