2013-11-19 4 views
0

В чем разница (и почему вы используете этот синтаксис) при передаче переменной в функцию?Передача переменной в конструктор

return _acks.GetOrAdd(id, new AckInfo()).Tcs.Task; 

return _acks.GetOrAdd(id, _ => new AckInfo()).Tcs.Task; 

return _acks.GetOrAdd(id, (_) => new AckInfo()).Tcs.Task; 

Что это за практика?

Here is the code in context

Линия 41

ответ

0

Последние два являются одинаковыми. Они являются пустыми Action без параметров. Подчеркивание означает заполнитель для небытия.

Первый не компилировался .. предполагая, что метод ожидается Action. В противном случае, если бы была перегрузка.

Итак, ответ - нет лучшей практики. Они одинаковы .. или они используются для определенной цели (Action vs no Action).

Предлагаю вам have a read up on what Delegates are in C#. В частности, what the Action delegate is useful for.

+1

Возможно также, что первый будет таким же, как и последние два, если неявное преобразование доступно для превращения объекта в действие. –

3

Я написал этот код, чтобы я мог ответить :). Второе и третье - одно и то же, но разница между первым заключается в том, что вы назначаете новый AckInfo каждый раз против создания делегата, который будет запущен, если потребуется. Это задерживает выделение AckInfo до последней минуты.

+0

Отлично! И посмотрите, как люди читают источник SignalR :) – Matthew

Смежные вопросы