Я эксперт на C++, но совсем не для C#. Я создал Dictionary<string, STATS>
, где STATS
- это простой struct
. Когда я построил словарь с начальными string
и STATS
парами, я хочу изменить значение словаря STATS
. В C++, это очень ясно:Изменение значения словаря C#
Dictionary<string, STATS*> benchmarks;
Initialize it...
STATS* stats = benchmarks[item.Key];
// Touch stats directly
Однако, я пытался, как это в C#:
Dictionary<string, STATS> benchmarks = new Dictionary<string, STATS>();
// Initialize benchmarks with a bunch of STATS
foreach (var item in _data)
benchmarks.Add(item.app_name, item);
foreach (KeyValuePair<string, STATS> item in benchmarks)
{
// I want to modify STATS value inside of benchmarks dictionary.
STATS stat_item = benchmarks[item.Key];
ParseOutputFile("foo", ref stat_item);
// But, not modified in benchmarks... stat_item is just a copy.
}
Это действительно начинающий проблема, но не так легко найти ответ.
EDIT: Я также попытался, как в следующем:
STATS stat_item = benchmarks[item.Key];
ParseOutputFile(file_name, ref stat_item);
benchmarks[item.Key] = stat_item;
Однако я получил исключение, поскольку такое действие аннулирует Словарь:
Unhandled Exception: System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
at helper.Program.Main(String[] args) in D:\dev\\helper\Program.cs:line 75
Ух, вы должны были оставить эти заглавные буквы в мире C++. Это выглядит ужасно на C#. Принципы именования Microsoft предлагают использовать случай Pascal. –
Структура - это тип значения, таким образом, это то же самое, что и объявление локального двойника, поэтому новый stat_item является копией словарной записи. Если STATS будет классом, то это будет ссылкой, и тогда это сработает. – weismat
Это очень простая программа для разбора игрушек. : D На самом деле, я все еще люблю писать код в стиле Windows C++, но теперь я вынужден следовать рекомендациям Google ... Извините за это! – minjang