Список / Сборник ссылок на недвижимость

Рассмотрим эти свойства,

        double _temperature;
        public double Temperature
        {
            get { return _temperature; }
            set { _temperature = value; }
        }
        double _humidity;
        public double Humidity
        {
            get { return _humidity; }
            set { _humidity = value; }
        }
        bool _isRaining;
        public bool IsRaining
        {
            get { return _isRaining; }
            set { _isRaining = value; }
        }

А теперь я хочу создать список / коллекцию / контейнер таких свойств,

PropertyContainer.Add(Temperature);  //Line1
PropertyContainer.Add(Humidity);     //Line2
PropertyContainer.Add(IsRaining);    //Line3

Я хочу сделать это так, чтобы позже я мог получить доступ к текущим значениям свойств с помощью index, примерно так:

object currentTemperature =  PropertyContainer[0];
object currentHumidity    =  PropertyContainer[1];
object currentIsRaining   =  PropertyContainer[2];

Но очевидно, что это не сработает, поскольку PropertyContainer[0] вернет старое значение - значение, которое Temperature имело во время добавления Temperature в контейнер (см. Line1 выше).

Есть ли решение этой проблемы? В основном я хочу получить доступ к текущим значениям свойств равномерно; единственное, что можно изменить, - это index. Однако индекс также может быть строковым.

PS: Я не хочу использовать Reflection!


person Nawaz    schedule 20.12.2010    source источник


Ответы (1)


Ну, вы могли бы использовать лямбды:

List<Func<object>> PropertyAccessors = new List<Func<object>>();
PropertyAccessors.Add(() => this.Temperature);
PropertyAccessors.Add(() => this.Humidity);
PropertyAccessors.Add(() => this.IsRaining);

тогда вы могли бы это сделать:

object currentTemperature = PropertyAccessors[0]();
person Botz3000    schedule 20.12.2010
comment
это отличное решение. после того, как я разместил вопрос, я получил такое же решение из другой темы. Большое спасибо за быстрый ответ с этим классным трюком! - person Nawaz; 20.12.2010
comment
Ой, я забыл об этом. Собственно раньше меня просили подождать 5 минут, черт знает почему. В любом случае, ответ принят и +1 от меня. - person Nawaz; 20.12.2010