我试图找出C#中一个方法可以拥有的最大参数数.我到处都找过答案,包括C#官方文档、MSDN和一些CLR参考资料,但我找不到答案.有人能回答这个问题吗?

推荐答案

以下是你的理论答案:

为了将方法参数推送到堆栈上,编译代码有以下MSIL操作码可供 Select :

ldarg.0

ldarg.1

ldarg.2

ldarg.3

ldarg.S

ldarg

ldarg.0ldarg.3用于将前4个方法参数推送到堆栈上(包括this作为实例方法的第一个参数).

ldarg.S接受一个8位参数号,因此它可以用来将多达256个参数推送到堆栈上.

这就给我们留下了普通的old ldarg,它可以处理大多数方法参数:它需要一个无符号的16位参数数,因此可以成功编译成有效MSIL的最大参数数是2^16 = 65,536.

然而,正如其他人所指出的,实际限制将取决于运行时的实现细节.根据rmiesen的回答,它看起来像电流.NET实现将参数的最大数量限制为2^14个.

.net相关问答推荐

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

.NET MAUI 的登录页面

如果只有一个 : 存在于字符串中,则提取冒号后的内容

如何找到windows服务exe路径

线程安全性的单元测试?

C#字符串的GetHashCode()是如何实现的?

在 .NET 反射中使用 GetProperties() 和 BindingFlags.DeclaredOnly

根源是什么?

使用字典作为数据源绑定组合框

我可以从我的应用程序中抛出哪些内置 .NET 异常?

XmlNode 值与内部文本

HttpClient 和使用代理 - 不断得到 407

获取 .NET Framework 目录路径

在 .NET (C#) 中本地存储数据的最佳方式

如何从 .NET 中的流中获取 MemoryStream?

如何保护我的 .NET 程序集免受反编译?

设置 System.Drawing.Color 值

我可以将构造函数参数传递给 Unity 的 Resolve() 方法吗?

模拟和单元测试需要时如何抛出 SqlException?

C#/.NET 中仅命名空间的类可见性?