public class TimeZone
{
public int Id { get; set; }
public string DisplayName{ get; set; }
}
Dans une autre classe que j'ai:C# comment obtenir le nom (en chaîne) d'une propriété de classe?
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
"Id",
"DisplayName");
Note: System.Web.Mvc.SelectList
Je n'aime pas avoir à écrire le nom de la propriété avec "Id" et "DisplayName". Plus tard dans le temps, peut-être que le nom de la propriété changera et le compilateur ne détectera pas cette erreur. C# comment obtenir le nom d'une propriété dans une chaîne?
MISE À JOUR 1
Avec l'aide de Christian Hayter, je peux utiliser:
var tz = new TimeZone();
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => tz.Id),
NameOf(() => tz.TranslatedName));
OU
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => new TimeZone().Id),
NameOf(() => new TimeZone().TranslatedName));
Si quelqu'un a une autre idée sans avoir besoin de créer un nouvel objet. N'hésitez pas à le partager :) merci.
Ceci est une excellente solution, mais gardez à l'esprit toute surcharge liée à l'utilisation des arborescences d'expression ainsi que la quantité de refactoring nécessaire quand vient le temps de changer toutes les références. Cela peut même être négligeable, mais il n'y a qu'une seule façon de le savoir! –
Je n'ai pas profilé cela, mais théoriquement le code fonctionne à partir d'un graphe d'objet d'arbre d'expression qui a déjà été construit par le compilateur, donc il devrait être assez rapide pour lire le nom. Si vous voulez lire la * valeur * de l'expression, c'est une toute autre histoire! –
Des tests de performance effectués à ce sujet? Serait-il sage de l'utiliser avec MVVM INotifyPropertyChanged? –