目录
C#中的params
首先,在C#中,我们一般是使用params关键字来处理不定参数的问题,对于params的用法这里不再赘述。
我们先来写一小段测试代码来看看C#中params是如何运作的:
我们使用ILSpy来进行反编译,得到它的IL代码:
由上图我们可以看到,ParamsTest和ArrayTest的参数都是一个int32的数组,并没有任何区别,ParamsTest只比ArrayTest多了如下IL代码:
可以看到,这里使用了一个param[1]指令,对于param的作用,一直没怎么找到,最后在Common Intermediate Language(CIL)的wiki(https://en.wikipedia.org/wiki/Common_Intermediate_LanguageReferences )的References里的ECMA文档(http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf )中找到了解释:
这里可以看到,param[0]是在取得函数的返回值,param[1]取得函数的第一个参数、param[2]取得第二个参数,以此类推。
然后调用了一次ParamArrayAttribute的构造器,查看微软给出的文档: