Разрешает ли ключевое слово dynamic в C # 4 определенные ранее невозможные операции с обобщениями? - PullRequest
1 голос
/ 27 октября 2009

Ключевое слово dynamic в 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 ]

2 голосов
/ 27 октября 2009

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

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

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

1 голос
/ 27 октября 2009

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

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

Обобщение и рефлексия: не совсем лучше вместе, но если вам это нужно ...

...