2017-09-03 4 views
1

Ich studiere Elektrotechnik, und ich bin ein Anfänger in C#. Ich habe Daten gemessen und möchte sie 2-dimensional speichern. Ich dachte, ich könnte ein Wörterbuch wie folgt machen:C# Wörterbuch mit Klasse als Schlüssel

Dictionary<Key, string>dic = new Dictionary<Key, string>(); 

"Key" ist hier eine eigene Klasse mit zwei int-Variablen. Jetzt möchte ich die Daten in diesem Wörterbuch speichern, aber es funktioniert nicht so weit. Wenn ich die Daten mit dem speziellen Schlüssel lesen möchte, sagt der Fehlerbericht, dass der Schlüssel im Wörterbuch nicht verfügbar ist.

Hier ist die Klasse Key:

public partial class Key 
{ 
    public Key(int Bahn, int Zeile) { 
    myBahn = Bahn; 
    myZeile = Zeile; 

} 
    public int getBahn() 
    { 
     return myBahn; 
    } 
    public int getZeile() 
    { 
     return myZeile; 
    } 
    private int myBahn; 
    private int myZeile; 
} 

für sie zu testen habe ich so etwas wie dieses:

Erste elemets in:

Key KE = new Key(1,1); 
dic.Add(KE, "hans"); 
... 

Erste elemets Out:

Key KE = new Key(1,1); 
monitor.Text = dic[KE]; 

Hat jemand eine Idee?

+0

Warum nicht Zeichenfolge als Schlüssel verwenden? Was genau willst du im Wörterbuch speichern? Kannst du den Anwendungsfall erklären? –

+0

Ja. Ich habe Daten von einem 3D-Raum-Scanner. Der Scanner hat zwei Achsen. Ich möchte die Messung abhängig von der Position der beiden Achsen speichern. Also, wenn Achse eins an Position 15 und Achse zwei an Position 30 ist, möchte ich den Schlüssel haben: 15.30 –

+0

Und was speichern Sie in den String-Wert? –

Antwort

2

Sie müssen die Methoden GetHashCode und Equals in Ihrer eigenen Klasse überschreiben, um sie als Schlüssel zu verwenden.

class Foo 
{ 
    public string Name { get; set;} 
    public int FooID {get; set;} 
    public override int GetHashCode()    
    { 
      return FooID; 
    } 
    public override bool Equals(object obj) 
    { 
      return Equals(obj as Foo); 
    } 

    public bool Equals(Foo obj) 
    { 
      return obj != null && obj.FooID == this.FooID; 
    } 
} 
+0

Okay, kannst du mir ein Beispiel schicken? –

+0

Ein Beispiel zu meiner Antwort hinzugefügt –

+0

danke. Aber ich kann es nicht in meiner Klasse implementieren. Können Sie erklären, was passiert, wenn ich diese Methoden überschreibe? Und wie wäre es, wenn du zwei int Variablen in der yout Foo Klasse hast? wie: Klasse Foo { public int Name {get; set;} public int FooID {get; Set;} –

Verwandte Themen