C#可变数目参数

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

ContractedBlock.gif ExpandedBlockStart.gif Code
/*
** Configuration settings for an individual database connection
*/
int sqlite3_db_config(sqlite3 *db, int op, 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

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

ContractedBlock.gif ExpandedBlockStart.gif 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;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值