ich dachte, dass ich alles, aber diese gesehen habe ... :)C# Generics, Vergleich 2 Strings fail sofern nicht anders angegeben ausdrücklich
Ich war auf einem generischen Graph vom Typ String arbeiten,
Graph<string> graph = new Graph<string>();
graph ist mit einer Klasse-Einschränkung wie folgt erklärt:
public class Graph<T> where T : class
Next i die Grafik mit einigen dynamicly erzeugten Strings aufzufüllen:
for (char t = 'A'; t < 'J'; t++)
{
GraphPrim.Add(t.ToString());
}
weit so gut, also (Node ist eine interne Klasse den ursprünglichen Wert und eine Liste von Verweisen auf andere Knoten (weil sein ein Graph) enthält)
Nun, wenn ich versuche, die Beziehungen zwischen den verschiedenen zu schaffen Knoten, ich muss den rechten Knoten nachsehen, indem ich seinen Wert überprüfe und das ist wo die Seltsamkeit beginnt.
Der folgende Code ist eine direkte Kopie des Ergebnisses im immidiate Fenster gefunden, nachdem einige Tests machen:
Nodes.First().Value
"A"
Nodes.First().Value == "A"
false
Nodes.First().Value.ToString() == "A"
true
Bin ich völlig fehlt etwas oder sollte nicht Nodes.First() Wert ==. "A" verwendet eine String-Vergleichsmethode. (Der JIT-Compiler kennt den Typ, der zur Laufzeit verwendet wird, und damit auch die unterstützten Methoden, richtig?). Es scheint mir so, als würde ich eine Zeichenfolge nicht explizit angeben, sondern eine Referenzprüfung anstelle eines Stringtests.
Es wäre toll, wenn jemand mir dies erklären könnte,
Vielen Dank im Voraus!
Was ist der statische Typ der Eigenschaft "Value"? –
Sind Sie sicher, dass der Wert wie folgt definiert ist: public T Value {get; einstellen; } – albertein