La parola chiave dinamica in C # 4 consente alcune operazioni precedentemente impossibili con generici?

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

  •  06-07-2019
  •  | 
  •  

Domanda

La parola chiave dynamic in C # 4 introduce nuovi modi di lavorare con oggetti che prima non erano possibili. In che modo questo si sovrappone ai generici? In particolare, ci sono operazioni potenzialmente utili che sono ora legali e valide?

Ad esempio, questo non è possibile ora:

// 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];

Esiste un modo per realizzare qualcosa di simile quando dinamico è disponibile?

È stato utile?

Soluzione

dinamico non ti aiuta molto qui. Devi ancora usare Type.GetGenericTypeDefinition () / MakeGenericType () per creare inizialmente l'oggetto, il che è meno che piacevole.

Se lo capisco correttamente, cosa farà la dinamica una volta che il tipo sarà costruito in quel modo, renderà più facile lavorare con esso. Ad esempio, tu sai di avere un elenco di qualche tipo, anche se il compilatore no. Quindi, se hai assegnato quell'elenco a una variabile dinamica, puoi fare cose come chiamare è il metodo .Add () e la chiamata dovrebbe risolversi in fase di esecuzione.

Nota che non ci ho ancora giocato personalmente, quindi fino a quando non lo provi da solo questo è ancora sentito.

Altri suggerimenti

Ora puoi farlo, anche se devi volerlo davvero. Osservare:

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

Generici e riflessioni: non molto meglio insieme, ma se ne hai bisogno ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top