2009-10-27 2 views
1

Ключевое слово dynamic в C# 4 представляет новые способы работы с объектами, которые ранее не были возможны. Как это перекрывается с дженериками? В частности, существуют ли операции, которые потенциально полезны, которые теперь являются законными и действительными?Поддерживает ли динамическое ключевое слово в C# 4 определенные ранее невозможные операции с дженериками?

Например, это не представляется возможным в настоящее время:

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

Есть ли способ сделать что-то подобное когда-то dynamic доступно?

ответ

2

динамика здесь не поможет. Вы все равно должны использовать Type.GetGenericTypeDefinition()/MakeGenericType(), чтобы создать объект изначально, что является менее приятным.

Если я правильно понимаю, что будет делать динамика, то после того, как вы построите такой тип, это упростит работу. Например, вы знаете, что у вас есть список какого-либо типа, даже если компилятор этого не делает. Поэтому, если вы назначили этот список динамической переменной, вы можете сделать так, как это называется метод .Add(), и вызов должен быть разрешен во время выполнения.

Заметьте, что я еще не играл с этим еще лично, поэтому, пока вы не попробуете это сами, это все еще просто слухи.

1

Вы можете сделать это сейчас, хотя вам действительно нужно это. Обратите внимание:

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

дженериков и отражение: на самом деле не лучше вместе, но если вам это нужно ...

Смежные вопросы