C#可变数目参数
前不久看sqlite的源码时发现这么一行代码,不知其语法,CSDN求助后认识了一位新名词:可变参数
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/*
** Configuration settings for an individual database connection
*/
int sqlite3_db_config(sqlite3 *db, int op,
![](/images/dot.gif)
va_list ap;
int rc;
va_start(ap, op);
switch( op ){
case SQLITE_DBCONFIG_LOOKASIDE: {
void *pBuf = va_arg(ap, void*);
int sz = va_arg(ap, int);
int cnt = va_arg(ap, int);
rc = setupLookaside(db, pBuf, sz, cnt);
break;
}
default: {
rc = SQLITE_ERROR;
break;
}
}
va_end(ap);
return rc;
}
请注意该方法的第三个参数,定义为"...",CSDN贴子地址:http://topic.csdn.net/u/20081219/09/0dc9e085-bc12-44af-8723-8a014868bca5.html
C\C++里的语法就不多做介绍了,实际上我也是一知半解,
直到今早在地铁里看书时发现,C#中也有类似的"可变参数",
在《.NET框架程序设计(修订版)》一书的206页面,第四部分,第九章第六节,可变数目参数
其介绍了如何定义和使用可变数目参数的方法,使用关键字params
书中举了一个简单的例子,注释都写代码中去了,不多说了,看代码,
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class App {
static void Main() {
//常规使用方法
Console.WriteLine( Add( new Int32[] { 1, 2, 3, 4, 5 } ) );
//另一种调用方法
Console.WriteLine( Add( 1, 2, 3, 4, 5 ) );
//当然,参数数目是可变的,但其类型是被约束的
Console.WriteLine( Add( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) );
//如果类型可变,数目可变怎么办?书给出的答案非常简单,就是使用object类型即可
//备注下下
}
/// <summary>
/// 使用了params关键字
/// </summary>
/// <param name="values">int[]</param>
/// <returns>int[]的和</returns>
static Int32 Add( params Int32[] values ) {
Int32 sum = 0;
for( int x = 0 ; x < values.Length ; x++ )
sum += values[ x ];
return sum;
}
}
------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
BUY ME COFFEE
![](https://images.cnblogs.com/cnblogs_com/kkun/212569/o_200616035329WechatIMG237.png)
![](https://images.cnblogs.com/cnblogs_com/kkun/212569/o_200616035334WechatIMG238.jpeg)