Это теоретический вопрос, у меня уже есть решение моей проблемы, которая поменяла меня по другому пути, но я думаю, что вопрос по-прежнему потенциально интересен.
Можно ли передавать свойства объекта в виде делегатов так же, как я могу с помощью методов? Например:
Скажем, у меня есть устройство чтения данных, загруженное данными, и каждое значение поля необходимо передать в свойства разных типов, проверенных для DBNull. Если вы пытаетесь получить одно поле, я могу написать что-то вроде:
if(!rdr["field1"].Equals(DBNull.Value)) myClass.Property1 = rdr["field1"];
Но если я скажу 100 полей, это становится громоздким очень быстро. Там несколько способов, чтобы призыв сделать это мог бы выглядеть красиво:
myClass.Property = GetDefaultOrValue<string>(rdr["field1"]); //Which incidentally is the route I took
Что также может показаться красивым как метод расширения:
myClass.Property = rdr["field1"].GetDefaultOrValue<string>();
Или:
SetPropertyFromDbValue<string>(myClass.Property1, rdr["field1"]); //Which is the one that I'm interested in on this theoretical level
Во втором случае свойство должно быть передано как делегат для его установки.
Итак, вопрос состоит из двух частей:
- Возможно ли это?
- Как это будет выглядеть?
[Поскольку это только теоретически, ответы в VB или С# одинаково приемлемы для меня]
Изменить: Здесь есть несколько полезных ответов. Спасибо всем.