Veuillez considérer cette classe:
public static class Age { public static readonly ssortingng F1 = "18-25"; public static readonly ssortingng F2 = "26-35"; public static readonly ssortingng F3 = "36-45"; public static readonly ssortingng F4 = "46-55"; }
Je veux écrire une fonction qui obtient “F1” et renvoie “18-25” .Par exemple
private ssortingng GetValue(ssortingng PropertyName) ....
Comment puis-je le faire?
Vous pouvez simplement utiliser l’instruction SWITCH
pour effectuer la tâche ci-dessus:
public static ssortingng GetValue(ssortingng PropertyName) { switch (PropertyName) { case "F1": return Age.F1; case "F2": return Age.F2; case "F3": return Age.F3; case "F4": return Age.F4; default: return ssortingng.Empty; } }
En utilisant Reflection, vous pouvez faire comme ceci:
public static ssortingng GetValueUsingReflection(ssortingng propertyName) { var field = typeof(Age).GetField(propertyName, BindingFlags.Public | BindingFlags.Static); var fieldValue = field != null ? (ssortingng)field.GetValue(null) : ssortingng.Empty; return fieldValue; }
J’ai fait des tests, dans ce cas cela fonctionnera:
public static ssortingng GetValue(ssortingng PropertyName) { return typeof(Age).GetField(PropertyName).GetValue(typeof(Age)); }
Il semble que les constantes statiques fonctionnent un peu différemment. Mais ce qui précède a fonctionné avec la classe dans l’OQ.
Pour un cas plus général, voir cette question .
Voici comment cela se fait avec reflection:
public static ssortingng GetValue(ssortingng PropertyName) { return Age.GetType().GetProperty(PropertyName).ToSsortingng(); }
Remarque: GetProperty () peut renvoyer null, ce qui planterait si vous passiez “F9999”
Je n’ai pas testé, vous pourriez avoir besoin de ceci:
public static ssortingng GetValue(ssortingng PropertyName) { return Age.GetType().GetProperty(PropertyName,BindingFlags.Static).ToSsortingng(); }
Cas général comme le commentaire:
public static ssortingng GetValue(object obj, ssortingng PropertyName) { return obj.GetType().GetProperty(PropertyName,BindingFlags.Static).ToSsortingng(); }
Utilisez la reflection avec Linq:
private ssortingng GetValue(ssortingng propertyName) { return typeof(Age).GetFields() .Where(field => field.Name.Equals(propertyName)) .Select(field => field.GetValue(null) as ssortingng) .SingleOrDefault(); }
vous devriez utiliser la classe Type . vous pouvez obtenir celui de la classe que vous utilisez avec la fonction getType()
. Une fois que vous avez le type, utilisez la fonction GetProperty . vous obtiendrez une classe propertyinfo . cette classe a une fonction getValue . cette valeur retournera la valeur de la propriété.
essayez ceci et appréciez:
public static ssortingng GetValueUsingReflection(ssortingng propertyName) { var field = Type.GetType("Agenamespace" + "." + "Age").GetField(propertyName, BindingFlags.Public | BindingFlags.Static); var fieldValue = field != null ? (ssortingng)field.GetValue(null) : ssortingng.Empty; return fieldValue; }
Agenamespace est un espace de noms dans lequel la classe Age est déclarée.