Эта публикация сведений об обходных путях для передачи свойств в качестве ссылок, включая использование выражений, таких как
public void StoreProperty(Expression<Func<T, object>> expr)
Этот подход приемлем, и я отмечаю, что многие фреймворки используют его (например, automapper, autofac), как подробно описано в Джеймсе Грегори "Введение в статическое отражение" , где он заявляет
Самое замечательное в том, что если вы измените имя члена внутри лямбды,вы получите ошибку компиляции, если вы не обновили все ссылки!Больше никаких скрытых ошибок.
Хотя я очень предпочитаю этот подход, он все еще не совершенен, так как вы можете передать любое выражение, возвращающее объект (или что бы то ни было, ваше возвращаемое значение), например
x => x.Name) //fine
x => x.Name+"x") //runtime error
Существует ли в настоящее время лучший способ ссылки на свойство (путем блокировки выражения или каким-либо другим способом)
Если нет, как будущая версия C # может заблокировать выражение?например, что-то вроде:
public void StoreProperty(Expression<Func<T, object>> expr) where expr.Member is PropertyInfo
уточнение : выше только пример, я знаю, что в настоящее время это не поддерживается;вот что я пытаюсь обсудить.