public class TimeZone
{
public int Id { get; set; }
public string DisplayName{ get; set; }
}
In einer anderen Klasse ich habe:C# Wie erhält man den Namen einer Klasseneigenschaft?
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
"Id",
"DisplayName");
Hinweis: System.Web.Mvc.SelectList
Ich mag auf den Eigenschaftsnamen mit "Id" nicht haben, schreiben und "DisplayName". Später wird sich der Eigenschaftsname möglicherweise ändern und der Compiler wird diesen Fehler nicht erkennen. C# Wie bekomme ich den Namen einer Eigenschaft in eine Zeichenfolge?
UPDATE 1
Mit Hilfe von Christian Hayter, kann ich verwenden:
var tz = new TimeZone();
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => tz.Id),
NameOf(() => tz.TranslatedName));
ODER
var gmtList = new SelectList(
repository.GetSystemTimeZones(),
NameOf(() => new TimeZone().Id),
NameOf(() => new TimeZone().TranslatedName));
Wenn jemand andere Idee hat, ohne die Notwendigkeit einer Schaffung neues Objekt Fühlen Sie sich frei, es zu teilen :) danke.
Dies ist eine großartige Lösung, aber bedenken Sie jeglichen Leistungsaufwand durch die Verwendung von Ausdrucksbäumen sowie das Ausmaß an Refactoring, das erforderlich ist, wenn alle Verweise geändert werden müssen. Es kann sogar vernachlässigbar sein, aber es gibt nur einen Weg, das herauszufinden! –
Ich habe dies nicht profiliert, aber theoretisch arbeitet der Code von einem Ausdruck-Baum-Objekt-Graphen, der bereits vom Compiler erstellt wurde, daher sollte es ziemlich schnell sein, den Namen zu lesen. Wenn Sie den * Wert * des Ausdrucks lesen möchten, ist das eine ganz andere Sache! –
Irgendwelche Leistungsprüfungen dabei? Wäre es ratsam, es mit MVVM INotifyPropertyChanged zu verwenden? –