Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个或多个参数_C#_Methods_Parameters_Refactoring - Fatal编程技术网

C# 一个或多个参数

C# 一个或多个参数,c#,methods,parameters,refactoring,C#,Methods,Parameters,Refactoring,我有两种方法: BuildThing(Thing a); BuildThings(IEnumerable<Thing> things); BuildThing(东西a); 建筑物(IEnumerable things); 从干净的代码角度来看,这是否好? 或者仅仅使用BuildThings并只使用一个东西传递IEnumerable会更好?还是使用参数 谢谢。我个人的喜好如下 接口: void Build(Thing thing); void Build(IEnumerable&l

我有两种方法:

BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
BuildThing(东西a);
建筑物(IEnumerable things);
从干净的代码角度来看,这是否好? 或者仅仅使用BuildThings并只使用一个东西传递IEnumerable会更好?还是使用参数


谢谢。

我个人的喜好如下

接口:

void Build(Thing thing);
void Build(IEnumerable<Thing> things);
void Build(东西);
虚空构建(i无数事物);
实施:

void Build(Thing thing)
{
    Build(new [] { thing });
}

void Build(IEnumerable<Thing> things)
{
    //do stuff
}
void Build(东西)
{
构建(新[]{thing});
}
无效构建(IEnumerable things)
{
//做事
}

我更喜欢使用此模式的原因是,它可以确保您在保留多个重载的同时提供灵活性,而不像
params
那样,您必须将任何不可枚举的数组转换为数组。

纯粹从“干净的代码”的角度来看,这是完全可以的。尽管从功能上来说,这些替代方案可能更适合您,也可能不适合您。例如,使用
params
强制在调用之前枚举集合,而不是在调用内部延迟枚举。

您可以做一件事:

BuildThings(params Thing[] things);
这使您能够使用:

BuildThings(thing1, thing2, thing3, ...);

params对于您的方法不是一个好的解决方案

我认为只要有一个实现,就可以有两个或更多的方法

public void BuildThing(Thing a)
{
    this.BuildThings(new List<Thing>(){a});
}
public void BuildThing(Thing a)
{
this.BuildThings(newlist(){a});
}

您提供的方法似乎是一个很好的实践。当您只构建一个实例而不是多个实例时,可能需要执行不同的操作


我不会使用<代码> PARAMS < /Cord>,因为这迫使您创建一个数组,如果您有一个列表,例如,

,我会考虑两种情况:

  • 要使用这两种方法,但在
    BuildThing(thinga)
    中,我将使用
    BuildThings(IEnumerable things)
    并仅使用一种方法传递IEnumerable
  • 使用
    params
    仅创建一个方法此选项有一个缺点-如果要传递多个参数,必须将每个
    IEnumerable
    转换为
    Array
    (当然数组除外)
  • 我可能会选择
    params
    解决方案