我希望使用Interlocked.Increment递增对象的整数成员,但我希望通过反射引用这些整数。我有的示例代码不起作用,如下所示。
public class StatBoard
{
#region States (count of)
public int Active;
public int Contacting;
public int Polling;
public int Connected;
public int Waiting;
public int Idle;
#endregion
protected IEnumerable<FieldInfo> states;
public StatBoard()
{
Type foo = GetType();
FieldInfo[] fields = foo.GetFields(BindingFlags.Instance & BindingFlags.Public);
states = from n in fields
where n.FieldType == typeof(int)
select n;
}
public void UpdateState(string key)
{
FieldInfo statusType = states.First(
i => i.Name == key
);
System.Threading.Interlocked.Increment(ref (int)statusType.GetValue(this));
}
}如何修改UpdateState方法以使其正常工作?
发布于 2010-07-17 10:04:20
这在设计上是行不通的。int是一种值类型。GetValue()方法返回一个整数的副本。您将递增副本,而不是原始副本。反射无法获取对值类型值的引用。
https://stackoverflow.com/questions/3269852
复制相似问题