2016-01-04 69 views
1

我有这样的代码:lambda表达式功能

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

+0

_cacheManager是什么类型? –

+0

_cacheManager实现ICacheManager IDisposable接口,该接口的方法定义如下: T获取(string key); – Simon

回答

1

这部分代码究竟意味着什么

它只是通过参数传递方法。

这是否意味着对缓存中的每一行都执行返回URL的函数?

只有对象_cacheManager的方法Get的内容可以回答这个问题。

那么什么是返回类型 - 列表?

的返回类型为字符串,因为你的变量url是一个字符串。

+0

对不起,我的意思是什么类型是从Get方法返回的变量,如字符串或字符串数​​组列表.. – Simon

+1

@Simon它唯一可能的回答它在方法内部寻找获取或传递鼠标方法(如果你使用Visual Studio)。返回类型将会显示给你 – fabriciorissetto

1

什么的代码究竟这部分的意思是:

好,lambda表达式是一条“捷径”的委托,和委托是一个回调函数的引用(在一个非常简单的解释)。所以这是一个将你的缓存管理器,它希望有一个Func委托作为第二PARAM的Get方法中调用的函数

这是否意味着函数返回地址,是从每一行执行缓存?

我认为这将用于执行具有键值一样cacheKey变量的值排。所以,只有一次(如果键是唯一的)

又是什么返回类型 - 列表?

返回类型是字符串,因为如果GetPictureUrl的结果为null,它将返回空字符串。并且调用此方法期望在结果中也有一个字符串