【发布时间】:2023-03-11 17:57:01
【问题描述】:
在研究这个时我发现了这个问题:Why C# allows that only the last parameter of a method is of "variable length"
虽然我 100% 同意那里的答案,并且理解允许这种事情的规则会像那里所说的那样复杂得可怕,但它并没有为我的实际问题提供答案。链接的问题讨论了T f(params A[] a, params B[] b),因此params 关键字的多个参数。
但没有提及以下想法:
void Foo(int head, params int[] body, int tail)
或者具体一点:不要问为什么你不能有多个 params 参数,为什么我们不能有一个 单个 params 参数,但不是在结尾(在中间的某个地方,还是在开头)?
我想不出一个复杂的原因,但请证明我错了!
例如让我们假设以下函数:
void Foo(int head, params int[] body, int tail)
{
Console.WriteLine($"{head} [{string.Join(", ", body)}] {tail}");
}
我认为结果应该是毫无疑问的。
Foo(1, 2) // 1 [] 2
Foo(1, 2, 3) // 1 [2] 3
Foo(1, 2, 3, 4) // 1 [2, 3] 4
没有“如何确定a 的结束位置和b 的开始位置?” (对链接问题的最高评论)在这种情况下,所以我看不到问题。
【问题讨论】:
-
也许是因为编写编译器会更难(但仍然可能)?
-
tail只是body数组的最后一个元素:body.Last()。您可以简单地使用void Foo(params int[] elements)并具有隐式的头/尾。 -
@Sinatr ofc,但这只是说明我观点的一个示例。头-身-尾系统恰好是我想到要拿来做例子的第一件事
标签: c# .net methods parameters