Ich bin ein C++ Experte, aber überhaupt nicht für C#. Ich habe eine Dictionary<string, STATS>
erstellt, wobei STATS
eine einfache struct
ist. Sobald ich das Wörterbuch mit den ursprünglichen string
und STATS
Paaren gebaut habe, möchte ich den STATS
Wert des Wörterbuchs ändern. In C++, es ist ganz klar:Ändern C# -Wörterbuch Wert
Dictionary<string, STATS*> benchmarks;
Initialize it...
STATS* stats = benchmarks[item.Key];
// Touch stats directly
Allerdings habe ich versucht, wie dies 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.
}
Dies ist ein wirklich Anfänger Problem ist, aber es war nicht einfach, eine Antwort zu finden.
EDIT: Ich habe auch versucht, wie die folgenden:
STATS stat_item = benchmarks[item.Key];
ParseOutputFile(file_name, ref stat_item);
benchmarks[item.Key] = stat_item;
Allerdings habe ich die Ausnahme bekam, da eine solche Aktion Wörterbuch entkräftet:
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, du hättest diese Großbuchstaben in der C++ Welt zurücklassen sollen. Es sieht in C# schrecklich aus. Die Benennungsrichtlinien von Microsoft schlagen vor, Pascal-Fall zu verwenden. –
Eine Struktur ist ein Werttyp, daher ist dies derselbe, der dann ein lokales Doppel deklariert, daher ist das neue stat_item eine Kopie des Wörterbuchsatzes. Wenn STATS eine Klasse wäre, dann wäre es eine Referenz und dann würde es funktionieren. – weismat
Dies ist ein sehr einfaches Spielzeug-Parsing-Programm. : D Eigentlich schreibe ich immer noch gerne Code im Windows C++ Stil, aber jetzt muss ich der Google-Richtlinie folgen ... Entschuldigung dafür! – minjang