列表/属性的引用集合

时间:2010-12-20 08:55:45

标签: c# list properties containers indexer

考虑这些属性,

        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 个答案:

答案 0 :(得分:11)

好吧,你可以使用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]();