Ich erstellte benutzerdefinierte Attribut namens someAttribute
.
Es boolean Mitglied hat Skip
genannt:So verwenden Sie Attribute 'Mitglieder innerhalb einer Methode
public class someAttribute : Attribute
{
public bool Skip { get; set; }
}
Im Main
initialisiert ich das Mitglied Skip
mit dem Wert true
für das Verfahren foo()
.
Next ich die Funktion foo()
nenne, die das Attribut [someAttribute()]
und ich möchte überprüfen, ob das Mitglied Skip
initialisiert wurde:
[someAttribute()]
private static int foo()
{
if(Skip)
{
return 0;
}
return 1;
}
erhielt ich den Fehler "Der Name‚Weiter‘existiert nicht in der aktuelle Kontext ".
Wie kann ich die Mitglieder des Attributs innerhalb einer Methode überprüfen, die dieses Attribut verwendet?
Mein vollständiger Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace ConsoleApplication1
{
class ProgramTest
{
[someAttribute()]
private static int foo()
{
if(Skip)
{
return 0;
}
return 1;
}
public class someAttribute : Attribute
{
public bool Skip { get; set; }
}
public static void initAttributes()
{
var methods = Assembly.GetExecutingAssembly().GetTypes().SelectMany(t => t.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static))
.Where(method => Attribute.IsDefined(method, typeof(someAttribute)));
foreach (MethodInfo methodInfo in methods)
{
IEnumerable<someAttribute> SomeAttributes = methodInfo.GetCustomAttributes<someAttribute>();
foreach (var attr in SomeAttributes)
{
attr.Skip = true;
}
}
}
static void Main(string[] args)
{
initAttributes();
int num = foo();
}
}
}
EDIT:
Ich habe BindingFlags.Static
, um die refelction foo()
die statische Funktion zu erhalten.
Mögliches Duplikat [Reflection - erhalten Namen und Wert auf Eigenschaft Attribut] (http://stackoverflow.com/questions/6637679/reflection-get-attribute-name-and-value-on-property) – HimBromBeere
Ich nehme an, Sie werden 'BindingFlags.Static | BindingFlags.NonPublic' als 'foo'-Methode ist' private static'. – HimBromBeere
Ich habe den Code bearbeitet und hinzugefügt, danke. – E235