1
我想使用Interlocked.Increment遞增對象的整數成員,但我想通過反射來引用這些整數。下面是示例代碼,它不起作用。Interlocked.Increment of Reflected Value Type
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方法使其工作?
爲什麼不首先使用鎖定/顯示器?如果您正在進行反射,則Interlocked.Increment()的性能優勢可能無法看到。此外,您不能確定別人是否同時修改相同的變量(使用或不使用反射)(無論您如何鎖定)。 – 2010-07-19 09:32:45