刚学C#的时候看过out参数和ref参数的用法,但是一直没有根据实际项目做过。
今天写WebService接口的时候用到了:
本来我是写一个方法查询一个数据库,返回一个DataSet给别人调用,没问题,完成了(我的上篇博客写有),但是项目总是变化 的,有人要求同时将DataSet的总记录条数也返回给他们调用。本来这也好解决,我想到的有以下几种方法:
1.给DataSet的DataTable增加一个字段,全部存放一样的内容,即总记录数。(数据冗余,他们希望得到更好的解决方法)
2.再写一个方法,专门用来获取总记录数。(他们想一次调用,同时获得DataSet和总记录条数,而且调用两个方法担心会不稳定不可靠,这点我也理解)
3.写一个重载方法。
上面都是比较笨的解决方案,这里受一个C#QQ群网友的提示才想到了out参数。(如此简单方便,以前也看过,竟然需要用的时候没想到):
public DataSet Search973Data(string dataName, string prodType, string startTime, string endTime, double dStartLong, double dEndLong, double dStartLat, double dEndLat, int onPage, int countOfPerPage,out int totalCount)
{
// ......code......
totalCount=ds.Tables[0].Rows.Count; //将总条数赋值给out参数返回
// ......code......
}
在此简要回顾一下out和ref参数。
out和ref关键字都是修饰参数的,表示是引用传递。
它们的区别在于:ref要求参数在传入之前需要进行初始化,而out则不需要进行初始化。
由于ref参数必须初始化再传递,所以在函数内部可以直接使用参数的值。同理,由于out参数在传递之前并不保证初始化,所以在函数内初始化该参数之前不能直接使用它的值,传递之前i的赋值对函数本身也没有实际意义。
理论上讲,out和ref并没有严格的使用限制。
通常,如果该参数仅仅是作为返回值参数就用out修饰;如果该参数的数据需要参与函数内部运算,则用ref修饰。