gpt4 book ai didi

c# - 为什么 Funcs 不接受超过 16 个参数?

转载 作者:IT王子 更新时间:2023-10-29 04:33:17 54 4
gpt4 key购买 nike

由于Javascript是我最精通的语言,所以我很熟悉使用函数作为一等对象。我原以为 C# 缺少此功能,但后来我听说了 FuncActiondelegate ,我认为这是非常棒的酱汁。

例如,您可以声明一个 Func连接两个字符串并在它们之间放置一个空格,如下所示:

Func<string, string, string> concat = (a,b) => a + " " + b;

我注意到当你打字的时候

Func<

IntelliSense 显示它有 17 个重载:

delegate System.Func<out TResult>
delegate System.Func<in T, out TResult>
delegate System.Func<in T1, in T2, out TResult>
...snip...
delegate System.Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, out TResult>

这让我笑了。我看着 MSDN docs对于 Func又笑了。这让我尝试声明一个 Func有 17 个参数。它会导致错误 ( Using the generic type 'System.Func<TResult>' requires 1 type arguments )。

我同意拥有 Func 可能不是一个好主意。接受超过 16 个参数。即便如此,这对于 Func 来说似乎是一种笨拙的方式。将要执行。它需要记录 17 个微不足道的不同重载。这就是它真正需要知道的全部内容:最后一个类型参数是返回类型,它之前的所有类型参数都是参数类型。

那么如果我想创建一个 Func 该怎么办呢?超过 16 个参数?为什么还是有限制?为什么 C# 不能让你声明一个 Func有任意数量的参数?

最佳答案

您希望得到类似 variadic type arguments 的结果C# 缺少的。 C# 要求固定泛型类型的数量,因此 FuncActionTuple 类型的数量激增。

如果您正在选购语言,这个功能是在 C++11 中添加的,但您可能应该只使用 jQuery。 :-)

关于c# - 为什么 Funcs 不接受超过 16 个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564027/

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