Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Linq查询扩展方法与其文档中的签名相关联?_C#_Linq_Extension Methods - Fatal编程技术网

C# 如何将Linq查询扩展方法与其文档中的签名相关联?

C# 如何将Linq查询扩展方法与其文档中的签名相关联?,c#,linq,extension-methods,C#,Linq,Extension Methods,从以下位置获取此代码: 下面的代码示例演示如何使用 其中(IEnumerable, Func)过滤 序列 列出水果= 新名单{“苹果”、“西番莲”、“香蕉”、“芒果”, “橘子”、“蓝莓”、“葡萄”、“草莓”}; IEnumerable query=fruits.Where(fruit=>fruit.Lengthfruit.length后面的内容?我猜在幕后,被编译器替换为泛型的正确类型,但我不知道如何阅读其余部分 编辑:如果这是一个委托而不是一个lambda,那么查看文档中指向什么的内容会更容

从以下位置获取此代码:

下面的代码示例演示如何使用 其中(IEnumerable, Func)过滤 序列

列出水果=
新名单{“苹果”、“西番莲”、“香蕉”、“芒果”,
“橘子”、“蓝莓”、“葡萄”、“草莓”};
IEnumerable query=fruits.Where(fruit=>fruit.Length<6);
foreach(查询中的字符串)
{
控制台。书写线(水果);
}
/*
此代码生成以下输出:
苹果
芒果
葡萄
*/
当我看到签名时

其中(IEnumerable, Func)

(fruit=>fruit.length<6)
的哪个部分是
IEnumerable
?而
Func
是否包括整个lambda,或者只包括
=>
后面的内容?我猜在幕后,
被编译器替换为泛型的正确类型,但我不知道如何阅读其余部分


编辑:如果这是一个委托而不是一个lambda,那么查看文档中指向什么的内容会更容易理解吗?

如果查看方法签名,您会发现它定义为

public static Enumerable
{
    public static IEnumerable<TSource> Where<TSource>(
        this IEnumerable<TSource> source,
        Func<TSource, bool> predicate
    )
}
和做的事情完全一样

Enumerable.Where(fruits, fruit => fruit.Length < 6);
可枚举。其中(水果,水果=>水果长度<6);

因此,要回答您的问题,
IEnumerable
位于

的左侧,如果您查看方法签名,您会发现它定义为

public static Enumerable
{
    public static IEnumerable<TSource> Where<TSource>(
        this IEnumerable<TSource> source,
        Func<TSource, bool> predicate
    )
}
和做的事情完全一样

Enumerable.Where(fruits, fruit => fruit.Length < 6);
可枚举。其中(水果,水果=>水果长度<6);

因此,为了回答您的问题,
IEnumerable
位于

的左侧,因为它是一个扩展方法,所以第一个参数是您从中“点画”的对象。在这种情况下,
部分是第一个参数。换句话说,
foo.Where(bar)
正在被翻译成
Where(foo,bar)
。您需要了解扩展方法是如何工作的。互联网可以帮助你@Will SO在互联网上。@johnny除了问答网站,你需要一个教程网站或。@ScottChamberlain我用过。这就是我来这里的原因。这并没有填补我的空白。在发布之前我读了一会儿。因为它是一个扩展方法,所以第一个参数是您从中“点画”的对象。在这种情况下,
部分是第一个参数。换句话说,
foo.Where(bar)
正在被翻译成
Where(foo,bar)
。您需要了解扩展方法是如何工作的。互联网可以帮助你@Will SO在互联网上。@johnny除了问答网站,你需要一个教程网站或。@ScottChamberlain我用过。这就是我来这里的原因。这并没有填补我的空白。发帖前我读了一会儿。Func部分呢?是否存在TSource?
TSource
是从
IEnumerable
推断出来的,因为您传入了一个
IEnumerable
,那么
TSource
是一个
字符串。作为一个普通函数编写的第二个参数是
bool myFunction(string fruit){return fruit.Length<6;}
doing
fruits.Where(myFunction)
是法定代码。lambada中
=>
左侧的部分只是您正在创建的匿名委托的参数声明。Func部分呢?是否存在TSource?
TSource
是从
IEnumerable
推断出来的,因为您传入了一个
IEnumerable
,那么
TSource
是一个
字符串。作为一个普通函数编写的第二个参数是
bool myFunction(string fruit){return fruit.Length<6;}
doing
fruits.Where(myFunction)
是法定代码。lambada中
=>
左侧的部分只是您正在创建的匿名委托的参数声明。