c#基础学习(0724)之可变参数、ref和out
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+300; } static void KouKuan(ref int m) { m=m-300; } #endregion //使用 static void Main(string[] args) { int money=1000; 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=100; x++; } #endregion //out使用 static void Main(string[] args) { int m=1000;//out方法可以不传值,传了也没用,因为方法里面必须为out参数赋值 Test1(out m); Console.WriteLine(m); }
out多个参数使用场景
//方法 static int GetAge(out string name,out int height) { name="超哥"; height=180; return 1000; } //使用场景,使用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("转换成功,结果为:{0}",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=10,x=20; 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!="888888") { 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 }