Список / Коллекция ссылок на недвижимость - PullRequest
6 голосов
/ 20 декабря 2010

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

        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 выше).

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

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

1 Ответ

11 голосов
/ 20 декабря 2010

Ну, вы можете использовать Lambdas:

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

, тогда вы можете это:

object currentTemperature = PropertyAccessors[0]();
...