Sono un esperto in C++, ma non per C#. Ho creato uno Dictionary<string, STATS>
, dove STATS
è un semplice struct
. Una volta creato il dizionario con le coppie iniziali string
e STATS
, desidero modificare il valore STATS
del dizionario. In C++, è molto chiaro:Modifica valore dizionario C#
Dictionary<string, STATS*> benchmarks;
Initialize it...
STATS* stats = benchmarks[item.Key];
// Touch stats directly
Tuttavia, ho provato come questo in 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.
}
Questo è un problema davvero alle prime armi, ma non è stato facile trovare una risposta.
EDIT: Ho anche provato come il seguente:
STATS stat_item = benchmarks[item.Key];
ParseOutputFile(file_name, ref stat_item);
benchmarks[item.Key] = stat_item;
Tuttavia, ho avuto l'eccezione in quanto tale azione invalida Dizionario:
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
Ugh, dovresti aver lasciato quelle lettere maiuscole nel mondo C++. Sembra orribile in C#. Le linee guida per la denominazione di Microsoft suggeriscono di utilizzare il caso Pascal. –
Una struct è un tipo di valore, quindi questo è lo stesso, quindi dichiara un double locale, quindi il nuovo stat_item è una copia del record del dizionario. Se STATS fosse una classe, allora è un riferimento e quindi funzionerebbe. – weismat
Questo è un programma di analisi del giocattolo molto semplice. : D In realtà, mi piace ancora scrivere codice in stile Windows C++, ma ora sono costretto a seguire le linee guida di Google ... Ci scusiamo per questo! – minjang