函数的ref、out参数
函数参数默认是值传递的,也就是“复制一份”
ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
static void Main(string[] args) { int age = 20;//定义一个整型变量 int i = 10;//定义一个整型变量 J(ref age);//传递ref 必须先给 变量一个值(初始化)。ref必须写++++++++ K(out i);//out无须先给一个值(初始化)。out必须写----------- Console.WriteLine("输出age的值为:{0}", age); Console.WriteLine("输出i的值为:{0}",i);// Console.ReadKey();//按任意键退出。 } static void J(ref int age)//ref 可以返回值。无须赋值。 age必须接收一个值。ref必须写+++++++++ { age++;//接收到20自增1,并返回。 } static void K(out int i) //out 不接收外部变量的值。 out一般多用于 多个返回值。out必须写----------- { i = 1;//接收的变量,必须在里面赋值。外面的赋值也函数内部无关,必须在函数内重新赋值。 }
输出结果:
案例:两个变量的交换;
static void Main(string[] args) { int i1 = 10;//定义一个整型变量 int i2 = 20;//定义一个整型变量 S(ref i1,ref i2);//ref 可以传递值,并且可以返回处理后的值。 Console.WriteLine("i1={0} i2={1}",i1,i2);//输出结果。 Console.ReadKey();//按任意键退出 } static void S(ref int i1,ref int i2)//接收到要处理的值,处理完成后,返回处理后的值、 { int temp = i1;//将i1值赋给temp。 i1 = i2;//将i2值赋给i1。 i2 = temp;//将temp值赋给i2。 }
输出结果:
通过使用 int.TryParse 判断输入的值是否可以转变成整型。
Console.WriteLine("请输入一个字符串。"); string s = Console.ReadLine(); int i; if (int.TryParse(s, out i))//Tryparse 可以传递两个值。out返回一个布尔类型的值。 {//Tryparse是判断s字符串是否能转变成一个int整型变量。out i 返回一个布尔值。 Console.WriteLine("可转换。"); } else { Console.WriteLine("不可以转换。"); }
输出结果: