LINQ - (x, i) 做什么?
LINQ - What does (x, i) do?
我今天偶然发现了这段代码,并意识到我根本不理解它。
someArray.Select((x, i) => new XElement("entry",
new XElement("field", new XAttribute("name", "Option"), i + 1)
(x, i)
有什么意义?我看到对 i
的引用,但我不明白 x
如何适合此 lamda 表达式。
还有,为什么i
是整数?我看到最后有一个 i + 1
,所以我假设这是真的。
感谢您的帮助
它在那里是因为表达式想要使用元素的索引,这是 lambda 表达式的第二个参数,i
。 Select
的另一个重载,其中传递的 Function
对象仅接受一个参数,仅访问元素(在该示例中名为 x
的 lambda 参数)。
a link Select
方法文档。
x
是数值,i
是索引
例如,片段:
void Main()
{
var values = new List<int> {100, 200, 300};
foreach( var v in values.Select((x, i) => (x, i))) // x is the value, i is the index
Console.WriteLine(v);
}
打印出来:
(100, 0) (200, 1) (300, 2)
您正在查看 LINQ .Select() 方法的这个特定重载。如上所述,i
只是序列中各个 x
的(零基*)索引。
回到您的特定代码片段,它完全无视 x
并使用 i
生成一个(基于一个 )的值翻译成 XML 节点。所以,如果你有
var someArray = Enumerable.Range(9999,5); // I'm just generating some big numbers here, you can do the same with strings or objects - it doesn't matter.
和 运行 您将得到如下代码:
<entry>
<field name="Option">1</field>
</entry>
<entry>
<field name="Option">2</field>
</entry>
<entry>
<field name="Option">3</field>
</entry>
<entry>
<field name="Option">4</field>
</entry>
<entry>
<field name="Option">5</field>
</entry>
我今天偶然发现了这段代码,并意识到我根本不理解它。
someArray.Select((x, i) => new XElement("entry",
new XElement("field", new XAttribute("name", "Option"), i + 1)
(x, i)
有什么意义?我看到对 i
的引用,但我不明白 x
如何适合此 lamda 表达式。
还有,为什么i
是整数?我看到最后有一个 i + 1
,所以我假设这是真的。
感谢您的帮助
它在那里是因为表达式想要使用元素的索引,这是 lambda 表达式的第二个参数,i
。 Select
的另一个重载,其中传递的 Function
对象仅接受一个参数,仅访问元素(在该示例中名为 x
的 lambda 参数)。
a link Select
方法文档。
x
是数值,i
是索引
例如,片段:
void Main()
{
var values = new List<int> {100, 200, 300};
foreach( var v in values.Select((x, i) => (x, i))) // x is the value, i is the index
Console.WriteLine(v);
}
打印出来:
(100, 0) (200, 1) (300, 2)
您正在查看 LINQ .Select() 方法的这个特定重载。如上所述,i
只是序列中各个 x
的(零基*)索引。
回到您的特定代码片段,它完全无视 x
并使用 i
生成一个(基于一个 )的值翻译成 XML 节点。所以,如果你有
var someArray = Enumerable.Range(9999,5); // I'm just generating some big numbers here, you can do the same with strings or objects - it doesn't matter.
和 运行 您将得到如下代码:
<entry>
<field name="Option">1</field>
</entry>
<entry>
<field name="Option">2</field>
</entry>
<entry>
<field name="Option">3</field>
</entry>
<entry>
<field name="Option">4</field>
</entry>
<entry>
<field name="Option">5</field>
</entry>