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

本文关键字:方法 什么 创建 一个 参数 对象 2个 包含 当你 | 更新日期: 2023-09-27 18:07:44

例如:

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

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

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

就良好实践而言——在您的特定情况下,我将不考虑此方法。实现一个只封装单个框架方法(HashSet<T>.UnionWith(的方法实际上只会模糊代码。

然而,总的来说,我认为文档和命名是关键。如果你的方法名称更清楚,那就显而易见了。考虑一下这个方法——FilterA实际上建议您"过滤"集合,而不是根据第二个集合向其中添加项目。

此外,使用适当的接口,如IEnumerable<T>,而不是传递具体的类(List<T>(,可以帮助区分事物。如果传递IEnumerable<T>,尤其如此,因为这是一个不公开任何编辑操作的接口。

您可以这样做:void FilterA(hashset<t> blacklist,IEnumerable<t> mylist>。很明显,IEnumerables是不能修改的。

但我认为这里最重要的是函数和变量的名称。从它们的名称中应该可以清楚地看到函数的作用。

如果没有List<T>特定的成员,可以使用不可变的接口。CCD_ 10是一个很好的候选者。

您可以使用IEnumerable作为第二个参数。

void FilterA<T>(HashSet<T> blacklist, List<T> mylist)
{
    blacklist.UnionWith(mylist);
}

没有与C/C++常量参数修饰符直接等效的方法。

您不想更改mylist吗?我建议使用这个:

void FilterA<T>(HashSet<T> blacklist, IEnumerable<T> mylist)
{
    blacklist.UnionWith(mylist);
}