C#函数的多参数的选择传参 和返回多个返回值

相信大家对c#的方法的传参和返回都有了解

比如:

        void Fun1()
        {
            
        }

这种就是不需要传参 没有返回值的方法 

        int Fun1(int a)
        {
            return a;
        }

这种就是有一个参数 一个返回值的方法 

        int Fun1(int a, int b, int c = 0, int d = 0)
        {
            return a + b + c + d;
        }

这种就是有四个参数 一个返回值的方法 其中有两个参数是必须传值的 c和d的参数可传可不传 如果不传 c和d在方法Fun1中就认为值是0
所以这种方可以这样调用
传两个参数

Fun1(1, 2);  

 这时 a=1 b=2,c=0,d=0

Fun1(1, 2, 3);

 这时 a=1 b=2,c=3,d=0

  Fun1(1, 2, 3, 4);

 这时 a=1 b=2,c=3,d=4

那有没有方法可以越过c直接给d穿值呢?

比如说我就想让c为0 让d有值 我又不想传4个参数


答案是有的
可以这样写

Fun1(a: 1, b: 2, d: 4);

 注:这种写法如果参数名发生改变会导致程序报错 不推荐只是说有这种写法

我们都知道参数类型可以分为 值类型和引用类型


当引用类型当作参数传递时 由于传递的是数据内存地址 所以方法体内对参数进行修改会使外部数据随之变化


那么当传递参数是值类型是是否可以让方法体内参数变化也影响到方法体外部呢
是可以的,并且有两种方法分别适用于不同的情况


1.使用关键字ref

static int Fun1(int a, ref int b) {
        b++;
        return a + b;
    }

static void Main(string[] args) {
        int b = 1;
        Fun1(1, ref b);
        Console.WriteLine(b);
}

此时打印出b的值为2;

使用ref的时候注意ref修饰的参数需要在使用前确定已经存在(即已经创建出来,在内存中已经存在)

2.使用关键字out

static int Fun2(int a, out int b) {
        b = 1;
        return a + b;
    }
static void Main(string[] args) {
	    int b1;
        Fun2(1, out b1);
        Console.WriteLine(b1);
 }

此时打印出来b1从默认值0变成了1;
 out与ref功能上类似 区别是使用out的时候可以不用确定参数是否已经在内存中存在即可以不用初始化

那么 我们看完了方法的参数 再回过头看下返回值


我们最常用的就是方法返回一个参数

如果要返回多个参数就通过构建类 在构建的类里边添加多个变量

然后让方法返回我们构建的类或者用上述提到的out或者ref达到让方法可以满足我们多个返回值的需求

那么有没有一种方法可以让方法返回多个值呢
当然可以,我们可以这样

static (int, string, float) Fun4() {
        int a = 2;
        string s = "str";
        float f = 0.2f;
        return (a, s, f);
    }
static void Main(string[] args) {
    var some = Fun4();
        Console.WriteLine(some.Item1);
        Console.WriteLine(some.Item2);
        Console.WriteLine(some.Item3);
 }

这是some里的Item1,Item2,Item3 分别是2,"str",0.2f;

而这么做的原理是什么呢?
这种写法是基于C#7.0之后的Tuple(元组) 有兴趣的同学可以自己研究一下

你可能感兴趣的:(C#基础知识,c#,开发语言)