Nur frage mich, ob es überhaupt ist den folgenden Code in C# 3.5 darstellen:Ist es in C# möglich, einen generischen Cast-Operator folgendermaßen zu überladen?
public struct Foo<T> {
public Foo(T item) {
this.Item = item;
}
public T Item { get; set; }
public static explicit operator Foo<U> (Foo<T> a)
where U : T {
return new Foo<U>((U)a.Item)
}
}
Dank
Und selbst wenn wir benutzerdefinierte generische Konvertierungen unterstützen würden, wäre dies immer noch illegal. Es ist nicht erlaubt, eine Konvertierung zu definieren, die eine integrierte Konvertierung ersetzt. Dies wäre der Fall, wenn T und U vom selben Typ wären; Sie würden die Identitätskonvertierung ersetzen. –
Da Umwandlungen vom Compiler entschieden werden, wenn T und U vom selben Typ sind, würde es nicht die benutzerdefinierte Umwandlung verwenden und leagal sein. –