2016-01-04 3 views
1

У меня есть этот код:лямбда-функции выражение

int pictureId=10; 
string cacheKey = string.Format(ModelCacheEventConsumer.PICTURE_URL_MODEL_KEY, pictureId); 
     return _cacheManager.Get(cacheKey,() => 
     { 
      var url = _pictureService.GetPictureUrl(pictureId, showDefaultPicture: false); 
      //little hack here. nulls aren't cacheable so set it to "" 
      if (url == null) 
       url = ""; 

      return url; 
     }); 

Что именно эта часть кода означает:»

() => 
{" 
    var url =...." 

Означает ли это, что функция, которая возвращает URL, который выполняется для каждой строки из ? кэш Что тогда возвращаемый тип - список

URL документации этого синтаксиса

+0

Какой тип _cacheManager? –

+0

_cacheManager реализует интерфейс ICacheManager IDisposable, который имеет метод Get определяется как: T Получить (строковый ключ); – Simon

ответ

1
?

Что именно эта часть кода означает

Это просто передача метода по параметру.

Означает ли это, что функция, которая возвращает URL-адрес, выполняется для каждой строки из кеша?

Только содержание метода Get объекта _cacheManager может ответить на этот вопрос.

Что такое тип возврата - список?

Возвращаемый типа является строкой, так как ваши переменной url является строкой.

+0

Извините, я имею в виду, какой тип переменной возвращается из метода Get, например, список строк или массив строк. – Simon

+1

@Simon его можно ответить только на него, глядя внутрь метода. Получить или пропустить мышь над методом (если вы используя Visual Studio). Тип возврата будет показан для вас – fabriciorissetto

4

Второй параметр для метода _cacheManager.Get() - анонимный метод, который захватывает pictureId и между прочим.

https://msdn.microsoft.com/en-us/library/bb397687.aspx

C# Lambda expressions: Why should I use them?

Чтобы выяснить, возвращаемый тип, попробуйте использовать уаг ключевым слово и создать локальную переменный: вместо return _cacheManager.Get() записи var x = _cacheManager.Get() с последующей return x. Затем просто наведите курсор мыши на ключевое слово var в Visual Studio.

1

Что именно эта часть кода означает:

Ну, лямбда-выражение является «ярлык» для делегата, а делегат является ссылкой на функцию обратного вызова (в очень простое объяснение). Таким образом, это функция, которая будет вызвана внутри Get метода диспетчера кэша, который рассчитывает иметь Func делегата в качестве второго паров

Означает ли это, что функция, которая возвращает URL, выполняются для каждой строки из кэш?

Я думаю, что это будет выполняется для строки, которая имеет ключевое значение, такое же, как значение переменной cacheKey .. Таким образом, только один раз (если ключи уникальны)

Что затем возвращать тип - список?

Тип возврата - это строка, потому что если результат GetPictureUrl равен null, он возвращает пустую строку. И вызов этого метода ожидает наличия строки в результате также

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