作为提醒,我目前正在学习 C#,并在遇到这个障碍时正在阅读一本教科书。

你如何从 ElementAt 调用 IEnumerable<T>
this 中的第二条评论
所以问题提到了它,但我只是收到一个错误。

Here 他们也提到这样做,但他们没有告诉你 !

如果我遗漏了一些基本的东西,这是我的代码:

using System.Collections.Generic;

class Card {}

class Deck
{
    public ICollection<Card> Cards { get; private set; }

    public Card this[int index]
    {
        get { return Cards.ElementAt(index); }
    }
}

我从我在 MSDN Library page 上得到的信息中求助于这个:
class Deck
{
    public ICollection<Card> Cards { get; private set; }

    public Card this[int index]
    {
        get {
        return System.Linq.Enumerable.ElementAt<Card>(Cards, index);
        }
    }
}

所有这些都来自关于集合的部分,以及我展示的第二个代码实现如何使从列表中获取特定元素变得更容易,而不必遍历枚举器。
Deck deck = new Deck();
Card card = deck[0];

代替:
Deck deck = new Deck();
Card c1 = null;
foreach (Card card in deck.Cards){
    if (condition for the index)
         c1 = card;
}

我这样做是对的还是我错过了什么?感谢您提供任何意见!

最佳答案

如果要使用 Linq extension methods ,请确保在文件顶部包含 System.Linq 命名空间:

using System.Collections.Generic;
using System.Linq; // This line is required to use Linq extension methods

class Card {}

class Deck
{
    public ICollection<Card> Cards { get; private set; }

    public Card this[int index]
    {
        get { return Cards.ElementAt(index); }
    }
}

当然,扩展方法只是带有一点语法糖的常规旧方法。你也可以这样称呼他们:
using System.Collections.Generic;

class Card {}

class Deck
{
    public ICollection<Card> Cards { get; private set; }

    public Card this[int index]
    {
        get { return System.Linq.Enumerable.ElementAt(Cards, index); }
    }
}

关于c# - ICollection<T> 上的 ElementAt(index),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20013115/

10-12 07:40