列表中的收益项

Stu*_*urm 0 c# yield

在我的应用程序中,List<MyItem>只有一个getter:

public List<MyItem> myList
{
    get
    {
         MyHost.GetItemFromID(_i1); //this may be a long operation
         MyHost.GetItemFromID(_i2);
         MyHost.GetItemFromID(_i3);
         MyHost.GetItemFromID(_i4);
         MyHost.GetItemFromID(_i5);
    }
}
Run Code Online (Sandbox Code Playgroud)

此列表有时需要整体检索,有时只需要访问某些项目:即myList[3].有没有办法不建立整个列表,因为我只需要第四项?

bar*_*caf 5

您可以使用类包装列表,例如'myListContainer'并重载其'[]'运算符,以便您可以执行以下操作:

myListContainer[3] 
Run Code Online (Sandbox Code Playgroud)

这将调用该调用

 MyHost.GetItemFromID(_i3);
Run Code Online (Sandbox Code Playgroud)

并返回所需的列表项.

如果需要,我会添加一个完整的例子

编辑

 public class myListContainer
{

    public MyItem this[int i]
    {
        get
        {
            return MyHost.GetItemFromID(i);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

并添加方法来获取整个列表.