最近博主在研究GPS单点定位的C#实现,在编写一个搜索最佳历元的函数时,遇到了一个问题,就是一个函数如何返回多个值:下面来看一下解决方案吧!
我们都知道,让函数返回一个值是非常简单的:
如下代码就定义了一个返回整型数值的函数
/*该函数实现两个整数相加*/
public int add(int a,int b)
{
int c = a+b;
return c
}
调用上面的函数时,定义一个整型变量即可接受函数返回值:
void mian()
{
int m = add(1,2)
MessageBox.Show(m)
}
上面主函数的运行结果就是
3(1+2=3)
若想返回一个double类型的数值,定义的时候改一下函数的类型即可:
/*该函数实现两个双精度浮点型相加*/
public double add(double a,double b)
{
double c = a+b;
return c
}
那么返回一个值的函数定义我们知道了,如何返回两个值甚至是多个值呢?
博主通过查阅资料,找到了一个方法,先上代码:
/****************************************************************************/
/*函数:搜索最佳历元 */
/*功能:找到与N文件的钟面时刻最接近的O文件观测时刻 */
/*输入值:N文件,O文件 */
/*返回值:O文件在数组中的位置(Ozuijia) */
/****************************************************************************/
public Tuple<ArrayList, ArrayList> SearchBest(ArrayList nData, ArrayList oData, ArrayList zuijia ,ArrayList zuijiaadress, int i)
{
GPSTime Ngpstime = new GPSTime();
GPSTime Ogpstime = new GPSTime();
double D = 7200;
for (int m = 0; m < nData.Count; m++)
{
if (((IList)((observation)oData[i]).PRN).Contains(((ncanshu)nData[m]).PRN))
{
Ngpstime = CommonTimeToGPSTime(((ncanshu)nData[m]).TOC);//TOC卫星钟的参考时刻,年月日时分秒
Ogpstime = CommonTimeToGPSTime(((observation)oData[i]).otime);
if (System.Math.Abs(Ngpstime.GPSSecond - Ogpstime.GPSSecond) <= D)
{
D = System.Math.Abs(Ngpstime.GPSSecond - Ogpstime.GPSSecond);
zuijia.Add(((ncanshu)nData[m]).PRN);
zuijiaadress.Add(m);
}
Ogpstime = new GPSTime();
}
else
{
continue;
}
}
return new Tuple< ArrayList, ArrayList >(zuijia, zuijiaadress);
}
大家可以看到,我在定义函数的时候,用到了这样的形式:
public Tuple<ArrayList, ArrayList> SearchBest(ArrayList nData, ArrayList oData, ArrayList zuijia ,ArrayList zuijiaadress, int i)
即:public Tuple<第一个返回值类型,第二个返回值类型>函数名
那么当调用这个函数的时候,如何接受这两个返回值呢?请看下面的代码:
var tuple = CalculateFunction.SearchBest(nData, oData,zuijia, zuijiaadress, i);
从上面我们可以看到:需要先定义一个名字叫tuple的变量名来接受函数返回的元组,该变量用var
关键字来声明,该关键字不同于int
、double
、string
等变量类型的声明,用var
类型预先不用知道变量的类型;根据你给变量赋值来判定变量属于什么类型,该关键字有以下几点注意事项:
1:必须在定义时初始化,即不能先定义后初始化,如:var a;a = 1;这样是不允许的
2:一旦初始化完成,不能再给变量赋与初始化不同的变量
3:var类型的变量必须是局部变量
声明一个变量来接受元组之后,就可以取元组中的值来赋给你需要的变量中了,具体操作如下:
zuijia1 = tuple.Item1;
zuijiaadress1 = tuple.Item2;
通过上面可以看到,利用.Item
便可以取出来元组中对应的数值。
以上就完成了返回多个值得函数的定义及调用的全部代码!
一起学习,一起进步,若您发现文中有疏漏之出,请多加指正!