簡體   English   中英

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 參數)。

這是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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM