Обратите внимание на «в отношении простых заданий». Другими словами, по сравнению с одной из самых дешевых операций бокс стоит дорого.
По сравнению с остальными машинами, задействованными в динамическом наборе текста, бокс дешев:)
Если бы TryGetMember
было общим, это означало бы, что вызывающий абонент должен был бы знать, какой тип ожидать. Одним из пунктов динамической типизации является то, что вызывающий абонент не может гарантировать, что произойдет. Если я напишу:
dynamic foo = GetDynamicValueFromSomewhere();
Console.WriteLine(foo.SomeProperty);
это только решит, какую перегрузку Console.WriteLine
использовать после того, как SomeProperty
был оценен. У него нет «ожидаемого» возвращаемого типа ... так какой аргумент универсального типа вы ожидаете использовать?
Имейте в виду, что большинство сценариев динамической типизации все равно будет использовать object
в качестве промежуточного типа выражения в CLR. Если я напишу:
dynamic x = 10;
это уже бокс. Вы не можете представлять «распакованный тип значения неопределенного типа» в CLR. (Сколько места он выделит?)