Ich habe das folgende AttributHolen Sie Attributobjekt von INamedTypeSymbol.GetAttributes(), d. H. AttributeData Objekt?
[AttributeUsage(AttributeTargets.Class)]
class DemoAttribute : Attribute
{
public string SomeInfo { get; }
public DemoAttribute(string someInfo)
{
this.SomeInfo = someInfo;
}
}
definiert, die zu einem gewissen Klasse angewendet werden können wie folgt:
[Demo("hello world")]
class Program { }
Eine INamedTypeSymbol
Variable namedTypeSymbol
auf die Program
Klasse zeigt mir zur Verfügung gestellt, mit denen habe ich es geschafft Erhalte den Namen des Attributs.
foreach(var attr in namedTypeSymbol.GetAttributes())
{
if(attr.AttributeClass.Name == "DemoAttribute") { ... }
}
Aber wie greife ich auf was als SomeInfo
eingestellt wurde?
Sie wissen nicht wirklich, wenn dies dazu beitragen wird (nicht an der Zeit zu prüfen, hatte), sondern versuchen, auf attr.NamedArguments Eigenschaft suchen. –
@PonasJustas Stimmt es, dass es keine Möglichkeit gibt, Roslyn-Typen wie 'AttributeData' in Reflektionsarten wie' Attribute' zu übersetzen? – David
@David korrekt. Roslyn und Reflection sollten als zwei verschiedene Welten betrachtet werden. Manchmal haben sie eine ähnliche Darstellung (wie 'MetadataName'), aber tatsächliche Objekte übersetzen nirgends, soweit ich weiß. –