我试图找出C#中一个方法可以拥有的最大参数数.我到处都找过答案,包括C#官方文档、MSDN和一些CLR参考资料,但我找不到答案.有人能回答这个问题吗?
我试图找出C#中一个方法可以拥有的最大参数数.我到处都找过答案,包括C#官方文档、MSDN和一些CLR参考资料,但我找不到答案.有人能回答这个问题吗?
以下是你的理论答案:
为了将方法参数推送到堆栈上,编译代码有以下MSIL操作码可供 Select :
ldarg.0
ldarg.1
ldarg.2
个
ldarg.3
ldarg.S
ldarg
ldarg.0
到ldarg.3
用于将前4个方法参数推送到堆栈上(包括this
作为实例方法的第一个参数).
ldarg.S
接受一个8位参数号,因此它可以用来将多达256个参数推送到堆栈上.
这就给我们留下了普通的old ldarg
,它可以处理大多数方法参数:它需要一个无符号的16位参数数,因此可以成功编译成有效MSIL的最大参数数是2^16 = 65,536
.
然而,正如其他人所指出的,实际限制将取决于运行时的实现细节.根据rmiesen的回答,它看起来像电流.NET实现将参数的最大数量限制为2^14
个.