我想在集合上创建自定义索引器。这是我的课程:
商务课程:
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。我该如何解决这个问题?
阅读文档以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)
| 归档时间: |
|
| 查看次数: |
2606 次 |
| 最近记录: |