在集合上实现自定义索引器

Roc*_*ngh 4 c# c#-4.0

我想在集合上创建自定义索引器。这是我的课程:

商务课程:

public class UserCollection : Collection<User>
{
    public new User this[int index]
    {
        get
        {
            return this.FirstOrDefault(x => x.UserID == index);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

BL API方法:

public static Collection<User> GetUser()
{
    return new UserCollection
               {
                   new User {UserID = 2},
                   new User {UserID = 4}
               };
}
Run Code Online (Sandbox Code Playgroud)

用法:

  Collection<User> users = GetUser();
    User user = users[2];

    }
Run Code Online (Sandbox Code Playgroud)

用户类有几列,如UserID,UserName等。我想通过索引从集合中获取用户,这里的索引就是用户ID。但是上面的用法代码没有做到这一点,它正在考虑父Collection类的索引器。我希望我的自定义索引器起作用。我可以通过将UserCollection公开为GetUser方法的返回类型来做到这一点,然后解决方案将使用这样的代码

UserCollection users = GetUser();
Run Code Online (Sandbox Code Playgroud)

但是我正在考虑从BL方法返回最通用的类​​型,即Collection。我该如何解决这个问题?

Jus*_*ner 5

阅读文档以Collection<T>仔细关注“继承者注意事项”部分。它将链接到另一个页面,该页面为您提供了您要执行的操作的示例。

您可能还想检查一下KeyedCollection<TKey, TItem>该类,这可能会使您的事情变得容易一些。您的自定义类将变成:

public class UserCollection: KeyedCollection<int, User>
{

    public UserCollection() : base() {}

    protected override int GetKeyForItem(User user)
    {
        return user.UserID;
    }
}
Run Code Online (Sandbox Code Playgroud)