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

#region 可变参数
//1.如果方法有多个参数,可变参数可以作为最后一个参数
//2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则args数组为一个长度为0的数组
//3.可变参数可以直接传递一个数组进来
static void Test(string msg,params int[] args)
{
//如果可变参数传值为null时,需要加上判断
if(args!=null)
{ }
}
#endregion 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();

}

ref参数使用方法

//ref仅仅时一个地址,引用传递,可以把值传递强制改为引用传递
//ref:参数在传递之前必须赋值,在方法中可以不为ref参数赋值,可以直接使用
//ref:应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所
#region ref参数
static void JianJin(ref int m)
{
m=m+;
}
static void KouKuan(ref int m)
{
m=m-;
}
#endregion //使用
static void Main(string[] args)
{
int money=;
JianJin(ref money);
KouKuan(ref money);
Console.WriteLine(money);
Console.ReadKey();
}

out参数使用方法

#region out参数
static void Test1(out int x)
{
//out参数在使用之前必须在方法里面为out参数赋值
//out参数无法获取传递进来的变量中的值,只能为传递进来的变量赋值
//out参数在方法执行完毕之前,必须赋值。 //Console.WriteLine(x);//报错:使用了未赋值的out参数"x"
x=;
x++;
}
#endregion //out使用
static void Main(string[] args)
{
int m=;//out方法可以不传值,传了也没用,因为方法里面必须为out参数赋值
Test1(out m);
Console.WriteLine(m);
}

out多个参数使用场景

//方法
static int GetAge(out string name,out int height)
{
name="超哥";
height=;
return ;
} //使用场景,使用ref也可以返回多个值
static void Main(string[] args)
{
//两个参数可以内联声明
string n;
int h;
int age=GetAge(out n,out h);
Console.WreteLine(age);
Console.WriteLine(n);
Console.WreteLine(h);
Console.ReadKey(); #region out使用场景2
string s="abc";
int result;
//将数字的字符串表示形式转换为他的等效32为有符号整数。一个指示转换是否成功的返回值
bool b=int.TryParse(s,out result);
if(b)
{
Console.WriteLine("转换成功,结果为:{}",result);
}
else
{
Console.WriteLine("转换失败,结果为:{0}",s)
}
#endregion
}

ref交换两个变量位置

#region 交换两个变量
static void Swap(ref int n1,ref int n2)
{
int tmp=n1;
n1=n2;
n2=tmp;
}
#endregion static void Main(string[] args)
{
int m=,x=;
Swap(ref m, ref x);
Console.WriteLine(m);
Console.WriteLine(x);
Console.ReadKey();
}

out用户登录练习

private static bool ValidUserLogin(string uid, string pwd, out string msg)
{
bool isOk=false;
if(uid!="admin")
{
msg="用户名错误";
}
else if(pwd!="")
{
msg="密码错误";
}
else
{
isOk=true;
msg="欢迎用户:"+usd;
}
return isOk;
} //使用
static void Main(string[] args)
{
#region用户登录练习
while(true)
{
Console.WriteLine("请输入用户名:");
string uid=Console.ReadLine();
Console.WriteLine("请输入密码:");
string pwd=Console.ReadLine();
string msg;//可以内联声明
bool isOk=ValidUserLogin(uid,pwd,out msg);
if(isOk)
{
Console.WriteLine("登录成功===={0}",msg);
}
else
{
Console.WriteLine("登录失败===={0}",msg);
}
}
#endregion
}

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. 排序算法之快速排序(Quicksort)解析

    一.快速排序算法的优点,为什么称之为快排? Quicksort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想. 所谓的分治思想就是对一个问题“分而治之”,用分治思想来解决问题需要两个 ...

  2. pageadmin CMS网站建设教程:如何修改用户密码?

    pageadmin CMS网站建设教程: 当我们想修改密码,该如何修改呢? 1. 首先,登录会员中心,会员中心的地址是在网址后面加上/member/login: 2. 例:我的网站地址是localho ...

  3. pandas 对dataframe一列中某些值进行处理

    https://github.com/Bifzivkar/Boutique-Travel-Services-Predict/blob/master/feature/5_extract_feature. ...

  4. 复制表结构和内容到另一张表中的SQL语句

    1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 2.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1= ...

  5. 【python入门】之教你编写自动获取金币脚本

    本文作者:青衫磊落 最近看到个特别全面源码分享网站,刚好有个项目是一直想做但是没有头绪的,就想下载学习一下.注册账号后,发现还需要若干金币.后来发现可以通过每隔一定时间发心情状态来获得金币,就打算写一 ...

  6. tomcat JNDI Resource 配置

    最近公司的项目慢慢开始向Maven项目迁移, 部分配置文件公共组也帮我们做了些改动,其中在spring的applicationContext.xml中看到了数据连接bean存在两个,一个是jndi 一 ...

  7. OS之进程管理---进程调度和多线程调度

    进程调度基本概念 多道程序的目标就是始终允许某个进程运行以最大化CPU利用率,多个进程通时存在于内存中,操作系统通过进程调度程序按特定的调度算法来调度就绪队列中的进程到CPU,从而最大限度的利用CPU ...

  8. manifest.xml

    main action 和 laucher的categoty If either the MAIN action or LAUNCHER category are not declared for o ...

  9. (转)Python标准库:内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

    原文:https://blog.csdn.net/caimouse/article/details/44133241 https://www.cnblogs.com/owasp/p/5372476.h ...

  10. RabbitMQ初学之二:直接发送消息到队列

    一. 背景 总前提:队列无论是在生产者声明还是在消费者声明,只有声明了,才能在RabbitMQ的管理界面看到该队列 生产者直接发送消息到队列,消费者直接消费队列中的消息,而不用指定exchange并绑 ...