Если мы говорим о безопасности типов и нарушении кода при переименовании свойств, например, дерево выражений «преимущество» сводится на нет теперь, когда у нас есть более новые функции C #, такие как nameof ():
Способ дерева выражений (быллучше перед nameof ()):
Expression<Func<YourClass, int>> expression = p => p.Id;
var memberExpression = (MemberExpression)expression.Body;
var property = ((PropertyInfo)memberExpression.Member);
GetProperty от имени (было плохо до nameof ()):
var property = typeof(YourClass).GetProperty(nameof(YourClass.Id));
Строковый ввод в GetProperty не был безопасным, посколькужестко запрограммирован на «Id», и когда вы переименуете свойство Id, ваш код будет прерываться во время выполнения, если вы не забудете заменить эту строку, а также.
Это сделало деревья выражений более безопасными, потому что вы использовали реальное имясвойства.
Но теперь, когда у нас есть nameof (), используемая строка фактически является именем свойства во время компиляции, и если вы переименуете свойство, и вы / ваша IDE «забудете» переименоватьв приведенном выше фрагменте также код будет сломан во время компиляции.
Так что теперь старый "плохой путь", на мой взгляд, более лаконичен и, вероятно, работает как минимум лучше.л, так как вам не нужен дополнительный кастинг.