处理封装集合的最佳编程实践?

时间:2018-01-03 18:36:39

标签: c# .net

在我的班上,我有这样的方法:

public List<int> IgnoredUsers;

public bool TryGet(int userId)
{
    return IgnoredUsers.Contains(userId);
}

public bool TryAdd(int userId)
{
    if (IgnoredUsers.Contains(userId))
    {
        return false;
    }

    IgnoredUsers.Add(userId);

    return true;
}

public bool TryRemove(int userId)
{
    return IgnoredUsers.Remove(userId);
}

问题是,我应该使用所有这些方法还是更好的编程习惯才能返回字典并在公共字段上调用包含?

2 个答案:

答案 0 :(得分:1)

如果您将List<int>替换为ISet<int>,则可以直接在IgnoredUsers集合上执行所有三项操作,如下所示:

private readonly ISet<int> ignoredUsers = new HashSet<int>();
public bool Contains(int userId) => ignoredUsers.Contains(userId);
public bool Add(int userId) => ignoredUsers.Add(userId);
public bool Remove(int userId) => ignoredUsers.Remove(userId);

这种方法比让您的班级用户可以使用IgnoredUsers更好,因为它可以让您的班级决定公开哪些操作。

注意:您的方法名称中的前缀Try...有点误导,因为方法签名不遵循.NET Try...模式,如{ {1}}和TryGetValue方法。我重命名了方法以与相应的集合方法保持一致。

答案 1 :(得分:0)

如果您的收藏是私人收藏,则应使用这些方法。

是的,HashSet<int>可能会更好。