English 中文(简体)
1个参数或许多参数
原标题:One parameter or many

我有两种方法:

BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);

Is this good from a clean code point of view? Or is maybe it would be better to just use BuildThings and pass IEnumerable with only one Thing? Or use params?

感谢。

最佳回答

我的个人倾向如下:

接口:

void Build(Thing thing);
void Build(IEnumerable<Thing> things);

执行:

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

void Build(IEnumerable<Thing> things)
{
    //do stuff
}

我倾向于采用这一模式的原因是,它确保你留在DRY。 虽然允许你灵活多载荷,但与<条码>第不同,你必须把任何非记录电子数字转换成一个阵列。

问题回答

你们可以做的是:

BuildThings(params Thing[] things);

能够使用:

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

贵方的方法不会是好的解决方案。

i 认为,只要你只是一个执行方法,你就会有两条或更多方法。

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

你提供的方法似乎是一种良好做法。 当你只重新建立单一案例而不是多起案件时,你想要做的事情可能有所不同。

我不想使用<代码>第<>条/代码”,因为如果你有名单,就迫使你建立阵列。

Purely from a clean code point of view, this is perfectly ok. Although functionally the alternatives might or might not suit you better. For example, using params forces the collection to be enumerated before the call as opposed to lazily enumerated inside the call.

I would consider two cases:

  1. to have those two methods, but in BuildThing(Thing a) I would use BuildThings(IEnumerable<Thing> things) and pass IEnumerable with only one Thing
  2. Create only one method with params This option have one drawback - you have to convert every IEnumerable to Array (except of arrays of course) if you want to pass more then one argument.

I would go with params solution probably.





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签