2016-12-05 2 views
-1

Если у меня есть:Каково значение, переданное лямбда при выражении Linq?

public Dictionary<string, int> ChangeDictionary(Dictionary<string, int> myDictionary) 
     { 
      myDictionary.OrderBy(a => rnd.Next()); 
     } 

Что такое "?" Я знаю, что это параметр анонимной функции, но я не знаю, как называется этот синтаксис. Я не могу сказать из документации MSDN. Является ли «a» словарем myDictionary?

EDIT: Извините. К что «а», "Я имею в виду, что получение передается в качестве значения параметра a ли MyDictionary

+0

'a' является' KeyValuePair '. Если вы проверяете вызов 'OrderBy()', он принимает 'IEnumerable '. Он предоставляет вам аргумент 'T'. В случае с «Словарем» он реализует «IEnumerable >' – Rob

+0

Теперь это ясно для вас? Если это так, вы можете подумать о том, чтобы отметить ответ как принятый. Если это не так, дайте нам знать. –

+0

Почему downvote? – johnny

ответ

4

.?„А“является параметром Вашей лямбда может быть переписана:.

private int MyOrderSelector(KeyValuePair<string, int> a) 
{ 
    return rnd.Next(); 
} 

Вы просто назвать это параметр, насколько я могу судить. его тип зависит от подписи лямбда. В этом случае OrderBy ожидает Func<KeyValuePair<string, int>, int>.

Вы можете сказать, какой тип a через IntelliSense, или когда используя LINQ, аргумент - это единственный элемент в подсчитываемой коллекции. Начиная с Dictionary - IEnumerable<KeyValuePair<K, V>>, а также KeyValuePair.

Для редактирования в этом конкретном случае ваша лямбда вызывается многократно, причем каждый элемент в словаре принимает свою очередь как значение параметра. В более общем смысле значение a является тем, что передал вызывающий абонент в качестве первого аргумента.

+0

Я спрашиваю, откуда берется значение «а». – johnny

+1

@johnny От вызывающего; лямбда - это функция и ничего не делает, если только – BradleyDotNET

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