Я хочу увеличить число элементов с помощью 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() может быть не видна в любом случае. Кроме того, вы не можете быть уверены, что кто-то еще модифицирует одну и ту же переменную (с или без отражения) одновременно (независимо от того, как вы блокируете). –