Ich habe diese Struktur:Seltsam Konvertierungsoperator Verhalten
public struct MyValue
{
public string FirstPart { get; private set; }
public string SecondPart { get; private set; }
public static implicit operator MyValue(string fromInput)
{ // first breakpoint here.
var parts = fromInput.Split(new[] {'@'});
return new MyValue(parts[0], parts[1]);
}
public static implicit operator string(MyValue fromInput)
{ // second breakpoint here.
return fromInput.ToString();
}
public override string ToString()
{
return FirstPart + "@" + SecondPart;
}
public MyValue(string firstPart, string secondPart) : this()
{
this.FirstPart = firstPart;
this.SecondPart = secondPart;
}
}
Und ich habe Haltepunkte setzen, wie oben durch die Kommentare angezeigt.
Dann mache ich das:
var first = new MyValue("first", "second");
if (first == (MyValue) null) throw new InvalidOperationException();
Ich bin ein seltsames Verhalten beobachtet, wenn es if (first == (MyValue) null)
eintritt: der zweite Haltepunkt aus irgendeinem Grund getroffen wird. Warum versucht es die MyValue
in eine Zeichenfolge für einen einfachen Gleichheitsvergleich zu konvertieren?
Dann, wenn ich den Code lassen fortsetzen, den ersten Haltepunkt trifft, und jetzt frage ich mich, warum ist es, eine Zeichenfolge zu konvertieren versuchen (der Wert ist null
trotz der Tatsache, dass ich ausdrücklich null
in ein geworfen haben MyValue
) in eine MyValue
? Strings sollten nicht mit einbezogen werden, wenn eine Aussage wie if (first == (MyValue) null)
verwendet wird, was passiert hier eigentlich?
Welcher der beiden impliziten Operatoren wird erwartet, wenn Sie 'null' liefern? – Igor
Weder, weil ich nichts "umwandle". Aber anscheinend bin ich. Daher meine Frage. –
Vielleicht hat es etwas mit der fehlenden Überladung für den Operator '== zu tun. –