前言
c#有三种高级参数out,ref,params,他们各自有各自的作用。
params
可变参数,params后面必须跟数组,之后不允许任何其他的参数,并且在方法中只允许有一个params关键字。例如:
public static int add(params int[] numbers)
{
int sum = 0;
foreach(int i in numbers)
{
sum = sum + i;
}
return sum;
}
out
主要用作程序的输出函数,与之对应的还有in函数,当然是程序的输入函数。
out关键字为引用类型,方法参数上的out方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调方法时,在方法中对参数所做的任何更改都将放映到该变量中。
public static void add(out int i)
{
i = 0;
i++;
}
ref
引用参数,同样为引用类型。
public static void add(ref int i)
{
i++;
}
其实,out和ref没有什么本质上的区别,但从代码上可以看出
1.用out关键字修饰的参数必须在方法内初始化,并且out可以返回多个值。
2.用ref关键字修饰的关键字需要在使用前先初始化。
实践应用
项目中需要分页查询,表格右下端需要显示总条数的,但是由于使用的是真分页,每次的sql查询只是查询特定范围之间的,所以需要一个参数代表总条数,符合输出参数和引用类型的特点,于是使用out关键字。下述代码为D层代码,仅供参考:
public List<VM_OutGoodsLog> goodsOnOut(VM_OutGoodsLog vmGoodsOnOut, int pageCount, int pageSize, out int total)
{
//设置分页开始记录和结果记录
int begin = (pageSize - 1) * pageCount;
string sql = "select * from t_item";
string sqldt = sql + " limit " + begin + "," + pageCount;
DataTable dt = MySQLHelper.ExecuteDataTable(sqldt);
DataTable dtCount = MySQLHelper.ExecuteDataTable(sql);
List<VM_OutGoodsLog> listCount = DatatableToList.ConvertToList<VM_OutGoodsLog>(dtCount);
total = listCount.Count;
return DatatableToList.ConvertToList<VM_OutGoodsLog>(dt);
}