当你创建一个参数包含2个对象但只改变1的方法时,有什么好的做法

时间:2011-09-05 15:32:26

标签: c#

例如:

          void FilterA(Hashset<T> blackList, List<T> myList)
          {
            blackList.UnionWith(myList);
          }

我不知道是否会有一些好的编码样式将blackListmyList分开。或者是否有必要?

5 个答案:

答案 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);
}