Será que a palavra-chave dinâmica em C # 4 permitir certas operações antes impossíveis com os genéricos?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

A palavra-chave dynamic em C # 4 introduz novas formas de trabalhar com objetos que antes não eram possíveis. Como é que esta sobreposição com os genéricos? Especificamente, existem operações que seriam potencialmente úteis que são agora legal e válido?

Por exemplo, isso não é possível agora:

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

Existe uma maneira de realizar algo semelhante uma vez dynamic está disponível?

Foi útil?

Solução

dinâmica não ajudar muito aqui. Você ainda precisará usar Type.GetGenericTypeDefinition() / MakeGenericType() para criar o objeto inicialmente, que é menos do que agradável.

Se eu entendi corretamente, o que dinâmica vai fazer é quando você tem o tipo construído dessa forma, ele irá torná-lo mais fácil de trabalhar. Por exemplo, você sei que você tem uma lista de algum tipo, mesmo se o compilador não. Então, se você atribuiu essa lista para uma variável dinâmica que você pode fazer coisas como chamada em seu método .Add() ea chamada deve resolver em tempo de execução.

Note que eu não tenho jogado com isso ainda, pessoalmente, embora, por isso até você experimentar por si mesmo isso ainda é apenas boatos.

Outras dicas

Você pode fazer isso agora, embora você tem que realmente quer. Observe:

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

Os genéricos e reflexão: não é realmente melhor em conjunto, mas se você precisar dele ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top