Wie beurteilen Sie die Beschreibung Eigenschaft Zugriff entweder auf einem const oder einer Eigenschaft, dhWie kann ich auf das Attribut Beschreibung einer Eigenschaft oder einer Konstanten in C# zugreifen?
public static class Group
{
[Description("Specified parent-child relationship already exists.")]
public const int ParentChildRelationshipExists = 1;
[Description("User is already a member of the group.")]
public const int UserExistsInGroup = 2;
}
oder
public static class Group
{
[Description("Specified parent-child relationship already exists.")]
public static int ParentChildRelationshipExists {
get { return 1; }
}
[Description("User is already a member of the group.")]
public static int UserExistsInGroup {
get { return 2; }
}
}
In der anrufenden Klasse Ich mag würde die Beschreibung Eigenschaft zuzugreifen, das heißt,
Ich bin offen für Ideen zu anderen Methoden als auch.
EDIT: ich erwähnt habe, sollte, dass ich ein Beispiel zur Verfügung gestellt hier gesehen habe: Do auto-implemented properties support attributes?
Aber ich bin auf der Suche nach einer Methode ohne die Beschreibung Attribut für den Zugriff auf einen Stringliteral einzugeben in den Objekttyp, das heißt, würde ich lieber nicht tun:
typeof(Group).GetProperty("UserExistsInGroup");
Etwas nach dem Vorbild einer Erweiterungsmethode; ähnlich dem folgenden Verfahren, das die Beschreibung Attribut auf einer Enum über eine Erweiterungsmethode zurück:
public static String GetEnumDescription(this Enum obj)
{
try
{
System.Reflection.FieldInfo fieldInfo =
obj.GetType().GetField(obj.ToString());
object[] attribArray = fieldInfo.GetCustomAttributes(false);
if (attribArray.Length > 0)
{
var attrib = attribArray[0] as DescriptionAttribute;
if(attrib != null )
return attrib.Description;
}
return obj.ToString();
}
catch(NullReferenceException ex)
{
return "Unknown";
}
}
In Antwort zu verwenden: siehe diese http://www.codeproject.com/Articles/28514/Strong-Reflection-without -Magic-Strings als eine Möglichkeit, die Eigenschaft Informationen sicher zu bekommen. – walpen