考虑这些属性,
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!
答案 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]();