params可变参数,无论有几个参数,必须出现在参数列表的最后,可以为可变参数直接传递一个对应类型的数组

  1. #region 可变参数
  2. //1.如果方法有多个参数,可变参数可以作为最后一个参数
  3. //2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则args数组为一个长度为0的数组
  4. //3.可变参数可以直接传递一个数组进来
  5. static void Test(string msg,params int[] args)
  6. {
  7. //如果可变参数传值为null时,需要加上判断
  8. if(args!=null)
  9. {
  10.  
  11. }
  12. }
    #endregion
  13.  
  14. static void Main(string[] args)
    {

  //Console.WriteLine("Hello World!");
  //Test("aa", 10, 1, 2, 32, 4, 5, 6);
  //int[] arrInt = new int[] { 1, 2, 3, 4, 5 };
  //Test("xxx");
  //Test("aaaa", arrInt);
  //Test("aaaa", null);
  //Console.ReadKey();
  //Console.WriteLine(""); ;
  //List<string> list = new List<string>();
  //Console.WriteLine("===={0}====",list);
  //Console.ReadKey();

  1. }

ref参数使用方法

  1. //ref仅仅时一个地址,引用传递,可以把值传递强制改为引用传递
  2. //ref:参数在传递之前必须赋值,在方法中可以不为ref参数赋值,可以直接使用
  3. //ref:应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所
  4. #region ref参数
  5. static void JianJin(ref int m)
  6. {
  7. m=m+;
  8. }
  9. static void KouKuan(ref int m)
  10. {
  11. m=m-;
  12. }
  13. #endregion
  14.  
  15. //使用
  16. static void Main(string[] args)
  17. {
  18. int money=;
  19. JianJin(ref money);
  20. KouKuan(ref money);
  21. Console.WriteLine(money);
  22. Console.ReadKey();
  23. }

out参数使用方法

  1. #region out参数
  2. static void Test1(out int x)
  3. {
  4. //out参数在使用之前必须在方法里面为out参数赋值
  5. //out参数无法获取传递进来的变量中的值,只能为传递进来的变量赋值
  6. //out参数在方法执行完毕之前,必须赋值。
  7.  
  8. //Console.WriteLine(x);//报错:使用了未赋值的out参数"x"
  9. x=;
  10. x++;
  11. }
  12. #endregion
  13.  
  14. //out使用
  15. static void Main(string[] args)
  16. {
  17. int m=;//out方法可以不传值,传了也没用,因为方法里面必须为out参数赋值
  18. Test1(out m);
  19. Console.WriteLine(m);
  20. }

out多个参数使用场景

  1. //方法
  2. static int GetAge(out string name,out int height)
  3. {
  4. name="超哥";
  5. height=;
  6. return ;
  7. }
  8.  
  9. //使用场景,使用ref也可以返回多个值
  10. static void Main(string[] args)
  11. {
  12. //两个参数可以内联声明
  13. string n;
  14. int h;
  15. int age=GetAge(out n,out h);
  16. Console.WreteLine(age);
  17. Console.WriteLine(n);
  18. Console.WreteLine(h);
  19. Console.ReadKey();
  20.  
  21. #region out使用场景2
  22. string s="abc";
  23. int result;
  24. //将数字的字符串表示形式转换为他的等效32为有符号整数。一个指示转换是否成功的返回值
  25. bool b=int.TryParse(s,out result);
  26. if(b)
  27. {
  28. Console.WriteLine("转换成功,结果为:{}",result);
  29. }
  30. else
  31. {
  32. Console.WriteLine("转换失败,结果为:{0}",s)
  33. }
  34. #endregion
  35. }

ref交换两个变量位置

  1. #region 交换两个变量
  2. static void Swap(ref int n1,ref int n2)
  3. {
  4. int tmp=n1;
  5. n1=n2;
  6. n2=tmp;
  7. }
  8. #endregion
  9.  
  10. static void Main(string[] args)
  11. {
  12. int m=,x=;
  13. Swap(ref m, ref x);
  14. Console.WriteLine(m);
  15. Console.WriteLine(x);
  16. Console.ReadKey();
  17. }

out用户登录练习

  1. private static bool ValidUserLogin(string uid, string pwd, out string msg)
  2. {
  3. bool isOk=false;
  4. if(uid!="admin")
  5. {
  6. msg="用户名错误";
  7. }
  8. else if(pwd!="")
  9. {
  10. msg="密码错误";
  11. }
  12. else
  13. {
  14. isOk=true;
  15. msg="欢迎用户:"+usd;
  16. }
  17. return isOk;
  18. }
  19.  
  20. //使用
  21. static void Main(string[] args)
  22. {
  23. #region用户登录练习
  24. while(true)
  25. {
  26. Console.WriteLine("请输入用户名:");
  27. string uid=Console.ReadLine();
  28. Console.WriteLine("请输入密码:");
  29. string pwd=Console.ReadLine();
  30. string msg;//可以内联声明
  31. bool isOk=ValidUserLogin(uid,pwd,out msg);
  32. if(isOk)
  33. {
  34. Console.WriteLine("登录成功===={0}",msg);
  35. }
  36. else
  37. {
  38. Console.WriteLine("登录失败===={0}",msg);
  39. }
  40. }
  41. #endregion
  42. }

c#基础学习(0724)之可变参数、ref和out的更多相关文章

  1. c#基础学习(0806)之可变参数、ref和out关键字的简单使用

    params可变参数: 1.无论方法有几个参数,可变参数必须出现再参数列表的最后,可以为可变参数直接传递一个对应类型的数组: 2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则数组为一个长度 ...

  2. [Python学习笔记-004] 可变参数*args和**kwargs

    在Python中,可变参数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...

  3. java基础基础总结----- 构造方法,可变参数列表

    package com.mon11.day2; /** * 类说明 :构造方法,可变参数列表 * @author 作者 : chenyanlong * @version 创建时间:2017年11月2日 ...

  4. java基础篇1之可变参数,增强for循环,自动装箱

    1.java中可变参数应用 例如 add(int x,int... args) 1)只能放在参数列表的最后面 2)...位于变量类型和变量名之间,前后有无空格都可以 3)调用可变参数的方法时,编译器为 ...

  5. java基础(20):Map、可变参数、Collections

    1. Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤 ...

  6. C基础知识(12):可变参数

    该功能需要使用<stdarg.h>.函数的最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是int,代表了要传递的可变参数的总数.该文件提供了实现可变参数功能的函数和宏. ...

  7. c++基础学习之函数与参数

    1.传值参数 //传值参数 int Abc(int a,int b,int c) { ; } a,b和c是函数Abc 的形式参数formal parameter,类型均为整型.如果在如下语句中调用函数 ...

  8. Python新手学习基础之函数-可变参数**

    可变参数( ** ) 讲好了一颗*,那如果函数的最后一个参数带有 ** 前缀: 所有正常参数之外的其他的关键字参数都将被放置在一个字典中传递给函数. 要好好理解* 和 ** 两种可变参数哦~ 看个** ...

  9. JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)

    1.IP简述使用//获取本地主机ip地址对象.InetAddress ip = InetAddress.getLocalHost();//获取其他主机的ip地址对象.ip = InetAddress. ...

随机推荐

  1. 4.C#WebAPI多版本管理介绍及实现方案详解

    1.什么是 API 的多版本? 说白了就是多版本共存的问题.为方便大家理解我就举个例子吧,大家想必都用过Jquery吧,它的1.*版本做到了对低版本IE的支持:2.*版本还保留着ajax,但是不再支持 ...

  2. 自定义两个控件,一个是显示图标和文字的矩形,一个是带边框的label(但是不是label)

    记录遇到的两个坑 坑1. 一开始我继承button 来实现下面的控件1,后面发现button没有双击事件.就改成继承UserControl了.重新编译,导致设计时的控件文本全部被清空,因为UserCo ...

  3. Json/XML序列化和反序列化

    1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...

  4. VisualStudio、NETFramework及C#版本关系

    1.Visual Studio..NET Framework 及C#版本搭载关系介绍 Visual Studio版本 .NET Framework版本 C#版本 增加功能 Visual Studio ...

  5. Linux openvswitch 性能调优-flow-eviction-threshold

    原文:https://www.cnblogs.com/scottieyuyang/p/5683656.html Increasing the flow-eviction threshold The t ...

  6. 配置阿里yum源,设置命令

    配置阿里yum源 #linux的软件包管理 安装 软件的方式有三种 .源代码编译安装() .下载python3的源代码 .解压缩源代码 .进入源代码目录,开始编译安装 .配置环境变量 .yum方式安装 ...

  7. [Auto Testing] 工具准备:Selenium 与 ChromeDriver

    <留存> Selenium http://selenium-release.storage.googleapis.com/index.html https://www.seleniumhq ...

  8. jmeter测试计划配置

    用户定义的变量: 测试计划上可以添加用户定义的变量.一般添加一些系统常用的配置.如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用户自定义变量组 ...

  9. 【洛谷p3994】Highway 二分+斜率优化DP

    题目大意:给你一颗$n$个点的有根树,相邻两个点之间有距离,我们可以从$x$乘车到$x$的祖先,费用为$dis\times P[x]+Q[x]$,问你除根以外每个点到根的最小花费. 数据范围:$n≤1 ...

  10. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...