C#可变数目参数

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

复制代码
Code
/*
** 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

书中举了一个简单的例子,注释都写代码中去了,不多说了,看代码,

复制代码
Code
public class App {
        
static void Main() {
            
//常规使用方法
            Console.WriteLine( Add( new Int32[] { 12345 } ) );

            
//另一种调用方法
            Console.WriteLine( Add( 12345 ) );

            
//当然,参数数目是可变的,但其类型是被约束的
            Console.WriteLine( Add( 123456789101112131415 ) );

            
//如果类型可变,数目可变怎么办?书给出的答案非常简单,就是使用object类型即可
            
//备注下下
        }


        
/// <summary>
        
/// 使用了params关键字
        
/// </summary>
        
/// <param name="values">int[]</param>
        
/// <returns>int[]的和</returns>
        static Int32 Add( params Int32[] values ) {
            Int32 sum 
= 0;
            
forint x = 0 ; x < values.Length ; x++ )
                sum 
+= values[ x ];
            
return sum;
        }
    }
复制代码
posted @   kkun  阅读(5988)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示