Ich bin neu in C#, aber relativ erfahren mit scala, ich versuche, die Listenklasse von scala nachzuahmen (die um Cons und die statische Klasse Nil erweitert wird). Ich hatte gehofft, das Typ-Verhalten auch zu bekommen, da .NET Kovarianz/Kontravarianz seit 4.0 unterstützt. Erlauben Sie mir, zu zeigen, was ich meine:Kovariante und kontravariante monadische Typen ala Scalas Liste in C#
Scala REPL:
class A
class B extends A
class C extends A
val x = new B() :: new B()
//this is type List[B]
val y = new C() :: new C()
//this is type List[C]
val z = new C() :: x
//This uses contravariance to figure out and infer that this is type List[A]!!!
In C# wird dies einen Compiler-Fehler werfen, weil C und B mit ImmutableList nicht vom gleichen Typ sind.
Es scheinen keine Beispiele online zu sein und ich bin immer noch ziemlich Anfänger mit C#, also dachte ich, es wäre klug zu fragen, ob C# das irgendwie kann, bevor ich blendend versuche (ich versuche es immer noch, aber ich Ich lerne auch zuerst den Rest der Sprache, während ich gehe.
Danke!
Dies scheint, wie Sie Typinferenz wollen, wenn eine Liste erstellen. C# hat das nicht. – juharr
Sie haben Recht, der Gedanke war mir in den Sinn gekommen, aber C# hat das mit dem Schlüsselwort "var", und ich weiß, dass es auch eine Möglichkeit gibt, Typ-Annotationen manuell zu analysieren (die zur Laufzeit in .NET gehalten werden) ?) und finde den kleinsten gemeinsamen Vorfahren in der Typhierarchie (das ist eher hässlich). –
Ich möchte nur die Prepend/Append-Operation in der Lage sein, diese Art Inferenz zu tun ... gibt es einen Weg? –