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;
        }
    }


------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
BUY ME COFFEE
原文地址:https://www.cnblogs.com/kkun/p/1382804.html