互锁。反射值类型的增量

时间:2010-07-17 01:35:59

标签: c# .net multithreading reflection synchronization

我想使用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方法以使其工作?

1 个答案:

答案 0 :(得分:1)

这在设计上无法奏效。 int是值类型。 GetValue()方法返回int的副本。您将增加该副本,而不是原始副本。 Reflection无法获取对值类型值的引用。