gpt4 book ai didi

c# - 为什么C#只允许最后一个参数为 "params type"

转载 作者:行者123 更新时间:2023-11-30 14:23:07 25 4
gpt4 key购买 nike

在对此进行研究时,我发现了这个问题: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 的开始位置?” (对链接问题的最高评论)在这种情况下,所以我看不到问题。

最佳答案

这些功能:

void Foo(int a, params int[] b)
void Foo(int a, params int[] b, int c)
void Foo(params int[] a, int b)

有不同的签名,所以只要您告诉 params 可以在任何您想要的地方,它们就应该被允许。

但是如果你有以下情况,你就无法决定要调用哪个:

Foo(1, 2, 3);

如果您说:“您可以在任何地方使用params除非在编译期间的某个时刻,我认为这将是一种“语言规范味道”有一个模棱两可的电话”。


像 C# 这样的高级语言的目标是避免歧义并让开发人员走上正轨。如果您必须完全更改代码的结构,因为您添加了一行代码,而现在某些语言功能不再可用,那么它对您没有帮助。

所以,是的,这是可能的,但我严重怀疑它对全局开发者是否有帮助。

这会使“您可以多次声明一个函数,只要它具有不同的签名”的规则变得复杂

这也会大大增加链接到其他程序集的难度。

关于c# - 为什么C#只允许最后一个参数为 "params type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com