|
Linq Расширяемые методы дженерик
|
|||
---|---|---|---|
#18+
Добрый день Linq основан на расширяемых методах, все они имееют дженерик параметры. Во всех примерах что я видел, типы явно не указываются. Почему так? И если смысл в явном опеределениее типов дженерик параметров. Поясняю свой ворпос Код: c# 1. 2.
Знаю что в дженерик коллекциях явное определение типов крайне важно для производительности и безопастности. Как обстоит дела в Расширяемых методах?? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 01:16 |
|
Linq Расширяемые методы дженерик
|
|||
---|---|---|---|
#18+
Che0, компилятор понимает какие именно типы-аргументы имелись в виду. Метод Select имеет следующую сигнатуру: Код: c# 1.
Ты вызываешь его для поля People которое является IEnumerable<People>. Следовательно тип-аргумент TSource это People. Лямбда возвращает строку. Значит TResult это string. Компилятор смог "угадать" типы без дополнительтных подсказок. Поэтому можно смело использовать сокращенный вызов: Код: c# 1. 2.
То есть в твоем примере обе строки ничем не отличаются по конечному результату компиляции. Che0Знаю что в дженерик коллекциях явное определение типов крайне важно для производительности и безопастности. Ты спутал несколько вещей - конструирование generic типа и его создание. При конструировании объекта мы обязаны указать тип аргумент. Иначе компилятор не поймет какой тип нам нужен. Вопрос производительности мы учитываем при создании generic типа. На этапе компиляции создается общая реализиция generic типа. Затем на этапе исполнения JIT-компилятор создает конкретные реализации. Для ссылочных типов реализация создается одна общая реализация. Для value типов создается своя собственная реализиция. Благодаря этому код и получается эффективным. Классический пример сравнение ArrayList и List<int>. Generic тип работает заметно быстрее из-за отсутствия упаковки/распаковки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 02:18 |
|
|
start [/forum/topic.php?fid=17&gotonew=1&tid=1349880]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 389ms |
0 / 0 |