Понимание строки примера кода - PullRequest
1 голос
/ 05 сентября 2011

Я пытаюсь изменить этот пример для своих нужд, но одна строка, в частности, поставила меня в тупик.Строка ((Action<List<MessageInfo>>)parm)(msgs); в чате-сервере не имеет для меня никакого смысла.Я вижу, что он относится к типу ((Action<List<MessageInfo>>)parm);, но он, похоже, ничего не делает.

Я надеюсь, что кто-то может помочь мне понять это, поскольку я чувствую, что это одна из последних частей, которые мне не хватает в этой головоломке ...

С уважением.

Ответы [ 3 ]

5 голосов
/ 05 сентября 2011

Они приводят делегата , а затем вызывают его с помощью msgs.

Этот бит:

((Action<List<MessageInfo>>)parm);

Приводит делегата.Затем он вызывает делегата с помощью msgs.

Немного разбив его на части:

Action<List<MessageInfo>> del = ((Action<List<MessageInfo>>)parm);
del(msgs);

Автор просто решил свернуть все это в одну строку.

3 голосов
/ 05 сентября 2011

Линия

((Action<List<MessageInfo>>)parm)(msgs)

- это не простое приведение, это приведение, за которым следует вызов метода. В основном это делает это:

Action<List<MessageInfo>> action = (Action<List<MessageInfo>>)parm;
action(msgs);
0 голосов
/ 05 сентября 2011

То, что они говорят, это:

Учтите, что:

parm является Action

, который принимает в качестве параметра List из <MessageInfo> с

и, поскольку Action s являются исполняемыми, выполните его,

Передача msgs в качестве параметра.

...