Ist die dynamische Keyword in C # 4 ermöglichen es, bestimmte bisher nicht mögliche Operationen mit Generika?

StackOverflow https://stackoverflow.com/questions/1630729

  •  06-07-2019
  •  | 
  •  

Frage

Das dynamic Schlüsselwort in C # 4 enthält neue Möglichkeiten, um mit Objekten zu arbeiten, die zuvor nicht möglich waren. Wie funktioniert diese Überlappung mit Generika? Insbesondere gibt es Operationen, die potentiell nützlich sein würden, die jetzt legal und gültig?

Zum Beispiel dies nicht möglich ist nun:

// Use a type whose value is known only at runtime.
Type t = ...;
List<t> l = new List<t>();
// ... (add some items to the list)
t first = l[0];

Gibt es eine Möglichkeit etwas ähnliches einmal dynamic zu erreichen, ist verfügbar?

War es hilfreich?

Lösung

dynamisch hat man hier nicht viel helfen. Sie müssen noch Type.GetGenericTypeDefinition() / MakeGenericType() verwenden, zunächst das Objekt zu erstellen, die weniger als angenehm ist.

Wenn ich es richtig verstehen, was dynamische zu tun ist, wenn Sie den Typ, der so aufgebaut haben, wird es leichter machen, mit zu arbeiten. Zum Beispiel: Sie Wissen Sie, eine Liste von irgendeiner Art haben, auch wenn der Compiler nicht. Also, wenn Sie diese Liste einer dynamischen Variablen zugewiesen haben Sie tun können, Dinge wie nennen es .Add() Methode und der Anruf zur Laufzeit lösen.

Beachten Sie, dass ich nicht mit dieser noch persönlich, wenn auch gespielt, so, bis Sie es versuchen, sich dies immer noch nur Hörensagen ist.

Andere Tipps

Sie können das jetzt tun, wenn Sie es wirklich wollen müssen. Beachten Sie:

Type t = ...;
typeof(List<>)
    .MakeGenericType(t)
    .GetMethod(...);

Generics und Reflexion: nicht wirklich besser zusammen, aber wenn Sie es brauchen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top