首页 > 其他分享 >怎样给函数设置多个返回值

怎样给函数设置多个返回值

时间:2022-09-30 14:13:54浏览次数:68  
标签:Console 函数 WriteLine int return 设置 返回值 public out

一、使用元组实现

1.1 使用ValueTuple实现

ValueTuple命名为元组(在C#7.1中可用),优点是它最简洁,不可变且易于构造。

private (double first, double second) GetHeight()
{
   return (1,2);
}
var result = GetHeight();
Console.WriteLine($"{result.first}, {result.second}");
var (first, second) = GetHeight();
Console.WriteLine($"{first}, {second}");

 

1.2 使用Tuple实现

.NET Framework已经具有通用的Tuple类。但是,这些类有两个主要限制。首先,Tuple类将其属性命名为Item1,Item2,依此类推。这些名称不包含语义信息。使用这些元组类型不能实现传达每个属性的含义。新的语言功能使您可以为元组中的元素声明和使用语义上有意义的名称。

public Tuple<int, int> ViaClassicTuple()
{
   return new Tuple<int, int>(1,2);
}
var tuple = ViaClassicTuple();
Console.WriteLine($"{tuple.Item1}, {tuple.Item2}");

 

二、使用列表(list<T>)或数组实现

2.1 使用List列表实现

private List<double> GetHeight()
{
   return new List<double>(){1,2};
}
var result = GetHeight();
Console.WriteLine($"{result[0]}, {result[1]}");

2.2 使用数组实现

private double[] GetHeight()
{
      return new double[2]{ 1,2};
}
var result = GetHeight();
Console.WriteLine($"{result[0]}, {result[1]}");

 

三、使用类、结构体实现

最常见的使用方式。

3.1 类实现

public struct ClassicStruct
{
   public int First { get; set; }
   public int Second { get; set; }
   public ClassicStruct(int first, int second)
   {
      First = first;
      Second = second;
   }
}
public ClassicStruct ViaClassicStruct()
{
   return new ClassicStruct(1, 2);
}
var classicStruct = ViaClassicStruct();
Console.WriteLine($"{classicStruct.First}, {classicStruct.Second}");

3.2  结构体实现

public class SomeClass
{
   public int First { get; set; }
   public int Second { get; set; }
   public SomeClass(int first, int second)
   {
      First = first;
      Second = second;
   }
}
public SomeClass ViaSomeClass()
{
   return new SomeClass(1, 2);
}
var someClass = ViaSomeClass();
Console.WriteLine($"{someClass.First}, {someClass.Second}");

 

 

四、使用out参数实现

参数进行的任何操作都是在自变量上进行的。就像ref关键字一样,除了ref要求在传递变量之前先对其进行初始化。它也类似于in关键字,除了in不允许调用的方法修改参数值。要使用out参数,方法定义和调用方法都必须显式使用out关键字。

4.1 多个out参数实现

public bool ViaOutParams(out int first, out int second)
{
   first = 1;
   second = 2;
   return someCondition;
}
if(ViaOutParams(out var firstInt, out var secondInt))
   Console.WriteLine($"{firstInt}, {secondInt}");

4.2使用out ValueTuple实现

public bool ViaOutTuple(out (int first,int second) output)
{
   output = (1, 2);
   return someCondition;
}
if (ViaOutTuple(out var output))
   Console.WriteLine($"{output.first}, {output.second}");

4.3 用out关键字

using System;
 
namespace test
{
    class Testout
    {
        public int getParts(double n, out double frac)
        {
            int whole;
 
            whole = (int)n;
 
            frac = n - whole; //pass fractional小数 part back through frac 
            return whole;     //return integer portion 返回整数部分   
        }
    }
 
    class Useout
    {
        static void Main()
        {
            Testout Tout = new Testout();
 
            int i;
            double f;
 
            i = Tout.getParts(1234.56789, out f);
 
            Console.WriteLine("整数部分:" + i);
            Console.WriteLine("小数部分:{0:#.###}" , f);
            Console.WriteLine("小数部分:" + f);
            Console.ReadKey();  //监听键盘事件,按任意键执行退出
        }
    }
}
 
 
 
 
  /// <summary>
    /// Ping命令检测网络是否畅通
    /// </summary>
    /// <param name="urls">URL数据</param>
    /// <param name="errorCount">ping时连接失败个数</param>
    /// <returns></returns>
    public static bool MyPing(string[] urls, out int errorCount)
    {
        bool isconnected = true;
        System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
        errorCount = 0;
        try
        {
            PingReply pr;
            for (int i = 0; i < urls.Length; i++)
            {
                pr = ping.Send(urls[i]);
                if (pr.Status != IPStatus.Success)
                {
                    isconnected = false;
                    errorCount++;
                    Debug.LogFormat("目标服务器{0}不可达,错误计数errorCount={1}", urls[i], errorCount);
                }
                // Console.WriteLine("Ping " + urls[i] + "    " + pr.Status.ToString());
                Debug.Log("Ping " + urls[i] + "    " + pr.Status.ToString());
            }
        }
        catch
        {
            isconnected = false;
            errorCount = urls.Length;
        }
        //if (errorCount > 0 && errorCount < 3)
        //  isconn = true;
        return isconnected;
    }
 
 
 
 
/// <summary>
    /// 检测网络连接状态
    /// </summary>
    /// <param name="urls"></param>
    //public static void CheckServeStatus(string[] urls)
    public bool CheckNetStatus(string[] urls)
    {
 
        int errCount = 0;//ping时连接失败个数
 
        //if (!LocalConnectionStatus())
        //{
        //    Console.WriteLine("网络异常~无连接");
        //}
        if (!MyPing(urls, out errCount))
        {
            if ((double)errCount / urls.Length >= 0.3)
            {
                Debug.Log("网络连接异常");
                return false;
                //Console.WriteLine("网络异常~连接多次无响应");
            }
            else
            {
                Debug.Log("网络连接正常");
                return true;
            }
        }
        else
        {
                Debug.Log("网络连接正常");
            return true;
            //Console.WriteLine("网络正常");
        }
    }
 

 

参考博文:https://blog.csdn.net/oopxiajun2011/article/details/119105674

 

一、使用元组实现返回多个值(ValueTuple和Tuple)

标签:Console,函数,WriteLine,int,return,设置,返回值,public,out
From: https://www.cnblogs.com/Yan3399/p/16744709.html

相关文章

  • 函数集合
    01提取不同文件夹下同名文件点击查看代码defselect(dir,name):importosimportshutillist1=[]list2=[]dd=''forroot,dirs,fil......
  • Mastercam 使用动态铣削下刀时,如何设置才能达到良好的排屑并延长刀具寿命?
    A:您可以在进刀方式,将下刀进给/转速勾起,自行设定下刀进给速率(F)、下刀主轴转速(S)、主轴变速暂停时间(P),以让切屑有暂停时间可排除。PS:主轴变速暂停时间P1000=停留1秒,需......
  • vscode 设置引用分层
    前言对于一个团队来讲,维持一样的代码风格非常重要.而现代的开发工具,都提供了很好的支持,这里简单记录一下VsCode的一些设置VsCode安装Go插件在VsCode中安......
  • C语言:字符串连接函数
    #include<stdio.h>#include<string.h>voidlianjie(chara[],charb[],charc[]){inti,j,len1=strlen(a),len2=strlen(b);for(i=0;i<len1;i++)c[i]=......
  • JavaScript箭头函数的使用以及和普通函数之间的使用
    箭头函数的使用以及和普通函数之间的转换// 第一种不带参数    // var one = function(){    //   return 'I am one'    // }    var......
  • sql排序函数 rank() / dense_rank()
    Rank排名函数1、rank()按照某字段的排序结果添加排名,但是他是跳跃的、间断的排名partitionby子句按照对应字段将结果集分为多个分区,然后orderby子句按分数对结果集进......
  • ES6形式常用的数组遍历函数
    文章目录​​0.给定一个数组​​​​1.find():查找成员对象​​​​2.findIndex():查找成员下标​​​​3.filter():过滤数组​​​​4.forEach():迭代数组​​​​5.some......
  • 1.1学生排名表(析构函数)
    现在输入一批学生(人数大于0且不超过100)的名次和他们的姓名。要求按名次输出每个人的排名。输入格式:每行为一个学生的信息,共两项,第一项为排名(为正整数,且任意两名学生的排名......
  • .Net下的CORS跨域设置
    CORS跨域访问问题往往出现在“浏览器客户端”通过ajax调用“服务端API”的时候。而且若是深究原理,还会发现跨域问题其实还分为【简单跨域】与【复杂跨域】这两种情况。网......
  • Pycharm-001-Pycharm一些设置
    1、设置滚轮滑动变大字体File—>setting—>Keymap—>IncreaseFontSize(双击)—>在弹出的对话框中选择AddMouseShortcut  出现上述窗口,按住ctrl+滑轮上滑2......