Разрешает ли ключевое слово dynamic в C # 4 определенные ранее невозможные операции с обобщениями?
Вопрос
Ключевое слово 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(...);
Обобщение и рефлексия: не совсем лучше вместе, но если вам это нужно ...