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

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Ключевое слово 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 станет доступным?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top