Soy un experto en C++, pero no en absoluto para C#. Creé un Dictionary<string, STATS>
, donde STATS
es un simple struct
. Una vez que construí el diccionario con los pares iniciales string
y STATS
, deseo modificar el valor del STATS
del diccionario. En C++, es muy claro:Modificar el valor del diccionario C#
Dictionary<string, STATS*> benchmarks;
Initialize it...
STATS* stats = benchmarks[item.Key];
// Touch stats directly
Sin embargo, he intentado como este en 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.
}
Este es un problema muy novato, pero no era fácil encontrar una respuesta.
EDITAR: Yo también trató como la siguiente:
STATS stat_item = benchmarks[item.Key];
ParseOutputFile(file_name, ref stat_item);
benchmarks[item.Key] = stat_item;
Sin embargo, tengo la excepción, ya que tal acción invalida Diccionario:
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
Uf, deberías haber dejado esas letras mayúsculas atrás en el mundo de C++. Se ve horrible en C#. Las pautas de nombres de Microsoft sugieren usar el caso Pascal. –
Una estructura es un tipo de valor, por lo tanto, esto es lo mismo que declarar un doble local, por lo tanto, el nuevo stat_item es una copia del registro del diccionario. Si STATS fuera una clase, entonces es una referencia y luego funcionaría. – weismat
Este es un programa de análisis de juguetes muy simple. : D En realidad, todavía me encanta escribir código en el estilo de Windows C++, pero ahora estoy obligado a seguir las directrices de Google ... ¡Lo siento por eso! – minjang