C#索引器和Linq

C#索引器和Linq,c#,linq,indexer,C#,Linq,Indexer,我在一个类中有一个属性: public int this[int index] { get { return _desk[index]; } set { _desk[index] = value; } } 但是我不能在林克使用这个类。如何创建?如果您的类没有实现,但具有索引器和计数属性,则可以使用创建索引的IEnumerable,并使用将每个索引投影到集合项: 索引器不会自动为您提供枚举。为了能够调用LINQ方法,

我在一个类中有一个属性:

public int this[int index]
        {
            get { return _desk[index]; }
            set { _desk[index] = value; }
        }

但是我不能在林克使用这个类。如何创建?

如果您的类没有实现,但具有索引器和计数属性,则可以使用创建索引的IEnumerable,并使用将每个索引投影到集合项:


索引器不会自动为您提供枚举。为了能够调用LINQ方法,您需要在类上实现

我假设您的
\u desk
对象是一个简单数组-如果我在这里错了,并且
\u desk
是另一个具有索引器的类,您可能需要使该类实现
IEnumerable

然后,您需要执行以下操作:

public class Position : IEnumerable<int>
{
    private int[] _desk;

    public int this[int index]
    {
        get { return _desk[index]; }
        set { _desk[index] = value; }
    }

    /* the rest of your class */

    public IEnumerator<int> GetEnumerator()
    {
        return ((IEnumerable<int>)_desk).GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return _desk.GetEnumerator();
    }
}
公共类位置:IEnumerable
{
私人内部[]_办公桌;
公共int这个[int索引]
{
获取{return _desk[index];}
设置{u desk[index]=value;}
}
/*你们班的其他同学*/
公共IEnumerator GetEnumerator()
{
return((IEnumerable)_desk).GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return_desk.GetEnumerator();
}
}

我不知道
GetEnumerator()
的实现是否是包装数组时的最佳实践,但它们应该可以工作。

请给出一个您尝试执行的示例。您的问题不清楚。您想如何使用它?你说“我不能用这个”是什么意思?如果索引器是访问数据的唯一方法,那么您可以考虑实现IQueReable:“我不能使用这个类”是什么意思?我们既看不到一个类,也看不到你是如何使用它的;var count=position.count()+1,这是实现
IEnumerable
的可行替代方案(特别是如果类不在您的控制之下),我不理解否决票。+1非常好的解决方案!我想人们总是需要“随时可用”的代码,即使你需要一个玻璃球来猜测他们的意图。。。
public class Position : IEnumerable<int>
{
    private int[] _desk;

    public int this[int index]
    {
        get { return _desk[index]; }
        set { _desk[index] = value; }
    }

    /* the rest of your class */

    public IEnumerator<int> GetEnumerator()
    {
        return ((IEnumerable<int>)_desk).GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return _desk.GetEnumerator();
    }
}