Mam tam klasę i właściwości. Niektóre właściwości można oznaczyć atrybutem (to moje LocalizedDisplayName
dziedzictwo DisplayNameAttribute
). Oto metoda na pobranie wszystkich właściwości klasy:
private void FillAttribute()
{
Type type = typeof (NormDoc);
PropertyInfo[] propertyInfos = type.GetProperties();
foreach (var propertyInfo in propertyInfos)
{
...
}
}
Chcę dodać właściwości klasy w polu listy, które oznaczono LocalizedDisplayName
i wyświetlić wartość atrybutu w polu listy. Jak mogę to zrobić?
EDYTUJ
To jest 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);
}
}
Chcę uzyskać ciąg z pliku zasobów. Dzięki.
c#
reflection
user348173
źródło
źródło
ToString()
? Czy możesz edytować swoje pytanie, aby dodać kod dla stosowanych przez Ciebie atrybutów niestandardowych i określić, które dane chcesz z niego wyłączyć?Odpowiedzi:
Prawdopodobnie najłatwiejszy w użyciu
IsDefined
:var properties = type.GetProperties() .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false));
Aby uzyskać same wartości, użyjesz:
var attributes = (LocalizedDisplayNameAttribute[]) prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);
źródło
IEnumerable<PropertyInfo>
tutaj :) Przydatne, jeśli osoba widząca tę odpowiedź nie jest zaznajomiona z Linq lub Reflections.