C#之定义有多个返回值的函数并调用该函数的方法

本文探讨了如何在C#中定义并调用一个返回多个值的函数,以解决GPS单点定位搜索最佳历元的问题。通过实例展示了如何使用Tuple类型和.Item属性获取元组中的ArrayList和ArrayList值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近博主在研究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关键字来声明,该关键字不同于intdoublestring等变量类型的声明,用var类型预先不用知道变量的类型;根据你给变量赋值来判定变量属于什么类型,该关键字有以下几点注意事项:

1:必须在定义时初始化,即不能先定义后初始化,如:var a;a = 1;这样是不允许的
2:一旦初始化完成,不能再给变量赋与初始化不同的变量
3:var类型的变量必须是局部变量

声明一个变量来接受元组之后,就可以取元组中的值来赋给你需要的变量中了,具体操作如下:

zuijia1 = tuple.Item1;
zuijiaadress1 = tuple.Item2;

通过上面可以看到,利用.Item便可以取出来元组中对应的数值。

以上就完成了返回多个值得函数的定义及调用的全部代码!

一起学习,一起进步,若您发现文中有疏漏之出,请多加指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八与她

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值