Interlocked.Increment типа отраженного значения - PullRequest
1 голос
/ 17 июля 2010

Я хочу увеличить целочисленные члены объекта, используя 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 Ответ

1 голос
/ 17 июля 2010

Это не может работать по замыслу. Int является типом значения. Метод GetValue () возвращает копию объекта int. Вы увеличите эту копию, а не оригинал. У Reflection нет способа получить ссылку на значение типа значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...