7
Beachten Sie Folgendes:Wie reflektieren Sie ein Attribut, das auf einen Rückgabewert angewendet wird?
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
public class NotNullAttribute : Attribute
{
}
public class Class1
{
[return: NotNull]
public static string TestMethod([NotNull] string arg)
{
return arg + " + " + arg;
}
}
Wie using System.Reflection, würden Sie sehen, dass das NotNullAttribute Attribut hatte auf den Rückgabewert der Methode angewandt? Wenn Sie nicht können, was ist der Zweck hinter der Syntax [return:]?
Gah. Ihre Antwort hat mir gezeigt, dass PostSharp MethodBase verwendet und deshalb nicht verfügbar war. Vielen Dank. – Amy
BTW, wenn Sie Assemblys in einen READ-ONLY-Kontext laden (was ich trotz meines vereinfachten Testfalls oben nicht getan habe), wird diese Lösung tatsächlich nicht funktionieren. Stattdessen müssen Sie Folgendes verwenden: CustomAttributeData.GetCustomAttribute (methodInfo.ReturnParameter) –
Es gibt auch 'mi.ReturnParameter.GetCustomAttributes' etc. @Amy, der Grund, warum sie nicht auf' MethodBase' verfügbar sind, scheint zu sein, dass Konstruktoren nicht zulassen Rückgabetypen, während "Nicht-Konstruktormethoden" dies tun (sie sind C# -Methoden, C# -Accessoren für Eigenschaften/Indexer/Ereignisse, C# -Operatoren). Methoden, die "void" zurückgeben, können auch benutzerdefinierte Attribute auf ihren Rückgabewerten haben! –