C#可变数目参数
前不久看sqlite的源码时发现这么一行代码,不知其语法,CSDN求助后认识了一位新名词:可变参数

/*
** Configuration settings for an individual database connection
*/
int sqlite3_db_config(sqlite3 *db, int op,

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
书中举了一个简单的例子,注释都写代码中去了,不多说了,看代码,

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


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架