Ich habe Klasse und Eigenschaften dort. Einige Eigenschaften können als Attribut markiert werden (es ist mein LocalizedDisplayName
Erbe von DisplayNameAttribute
). Dies ist eine Methode zum Abrufen aller Eigenschaften der Klasse:
private void FillAttribute()
{
Type type = typeof (NormDoc);
PropertyInfo[] propertyInfos = type.GetProperties();
foreach (var propertyInfo in propertyInfos)
{
...
}
}
Ich möchte der Listbox Eigenschaften der Klasse hinzufügen, die den LocalizedDisplayName
Wert des Attributs in der Listbox markieren und anzeigen. Wie kann ich das machen?
BEARBEITEN
Dies ist LocalizedDisplayNameAttribute:
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
public LocalizedDisplayNameAttribute(string resourceId)
: base(GetMessageFromResource(resourceId))
{ }
private static string GetMessageFromResource(string resourceId)
{
var test =Thread.CurrentThread.CurrentCulture;
ResourceManager manager = new ResourceManager("EArchive.Data.Resources.DataResource", Assembly.GetExecutingAssembly());
return manager.GetString(resourceId);
}
}
Ich möchte einen String aus der Ressourcendatei erhalten. Vielen Dank.
c#
reflection
user348173
quelle
quelle
ToString()
? Können Sie Ihre Frage bearbeiten, um Code für die benutzerdefinierten Attribute hinzuzufügen, die Sie anwenden, und angeben, welche Daten Sie daraus entfernen möchten?Antworten:
Es ist wahrscheinlich am einfachsten zu bedienen
IsDefined
:var properties = type.GetProperties() .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false));
Um die Werte selbst zu erhalten, verwenden Sie:
var attributes = (LocalizedDisplayNameAttribute[]) prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);
quelle
IEnumerable<PropertyInfo>
hier angeben :) Hilfreich, wenn die Person, die diese Antwort sieht, nicht mit Linq oder Reflections vertraut ist.