例如:
void FilterA(Hashset<T> blackList, List<T> myList)
{
blackList.UnionWith(myList);
}
我不知道是否会有一些好的编码样式将blackList
和myList
分开。或者是否有必要?
答案 0 :(得分:7)
就良好做法而言 - 在您的具体情况下,我会抛弃这种方法。实现一个只包含单个框架方法(HashSet<T>.UnionWith
)的方法实际上只会模糊代码。
但是,总的来说,我认为文档和命名是关键。如果你的方法名称更清楚,那就很明显了。考虑这种方法 - FilterA
实际上建议您“过滤”集合,而不是根据第二个集合向其添加项目。
此外,使用适当的接口(例如IEnumerable<T>
)而不是传递具体的类(List<T>
)可以帮助区分事物。如果您传递IEnumerable<T>
,则尤其如此,因为这是一个不公开任何编辑操作的界面。
答案 1 :(得分:3)
您可以这样做:void FilterA(hashset<t> blacklist,IEnumerable<t> mylist>
。很明显IEnumerables无法修改。
但我认为这里最重要的是函数和变量的名称。从他们的名字应该清楚这个功能是做什么的。
答案 2 :(得分:2)
如果您没有List<T>
特定成员,则可以使用非可变接口。 IEnumerable<T>
是一个很好的候选人。
答案 3 :(得分:2)
您可以将IEnumerable用作第二个参数。
void FilterA<T>(HashSet<T> blacklist, List<T> mylist)
{
blacklist.UnionWith(mylist);
}
没有直接等同于C / C ++ const参数修饰符。
答案 4 :(得分:2)
您不想更改mylist吗?我建议用这个:
void FilterA<T>(HashSet<T> blacklist, IEnumerable<T> mylist)
{
blacklist.UnionWith(mylist);
}