lambda表达函数

时间:2016-01-04 19:53:14

标签: c# 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的函数?什么是返回类型 - 列表?

此语法的文档的URL?

3 个答案:

答案 0 :(得分:4)

_cacheManager.Get()方法的第二个参数是一个匿名方法,它捕获pictureId以及其他内容。

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

C# Lambda expressions: Why should I use them?

要找出返回的类型,请尝试使用var关键字并创建局部变量:而不是return _cacheManager.Get()var x = _cacheManager.Get()后跟return x。然后将鼠标悬停在Visual Studio中的关键字var上。

答案 1 :(得分:1)

  

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

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

  

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

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

  

什么是返回类型 - 列表?

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

答案 2 :(得分:1)

  

这部分代码到底意味着什么:

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

  

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

我认为它将对具有与cacheKey变量值相同的键值的行执行..所以,只有一次(如果键是唯一的)

  

什么是返回类型 - 列表?

返回类型是字符串,因为如果GetPictureUrl的结果为null,则返回空字符串。并且调用此方法期望在结果中也包含字符串