c# 01 参数类型 ref,out,params_i++




1.演示try catch捕获例子:


public static void getNumber()
{
while (true)
{
try
{
Console.WriteLine("请输入一个数字");
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("恭喜您输入对了,您输入的数字是:{0}", number);
break;
}
catch
{
Console.WriteLine("输入错了,请重新输入,需要输入阿拉伯数字,就是‘0123456789’这样的数字,你明白吗?");
}
}
Console.ReadKey();
}


2 :ref参数:要求必须要在方法外为其赋值,这样方法内才有修改的意义,如果值都没赋建议使用out类型参数。更新传递到别的方法中的值。方法a中声明定义的一个变量传到方法b中,在经过方法b更新值后,方法a的值也会跟着更新。

变量定义在类中那么就是这个类的属性,不管在任何地方更新这个对象,只要更新完成所有被引用的这个对象都会同步更新。

变量定义在方法中,由于方法不能像类一样被传递,所以从它被传过去的那一刻开始就属于独立的了,不会再被引用了,从此你是你我是我,各不相干,这就是方法要返回值得作用,就是接受被加工后此值得变化。

在C#中ref关键字就比较牛逼了,在不需要定义对象的情况下就能实现变量随时在不同的方法中更新。需要的时候就用,不需要的时不用,很方便。



using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string name = "王晓明";
int age = 28;
//ref的作用是:被调用方法更新变量值后同步到外层变量上。
goThailand(ref name, ref age);
Console.WriteLine("name:{0}\nage:{1}", name, age);
Console.ReadKey();
/*
* 运行结果
name:杨baby
age:32
*/
}

static void goThailand(ref string name, ref int age)
{
name = "杨baby";
age = 32;
}
}
}



3.演示out方法的实例:可以接受被调用的方法返回多个不同类型的值,要求out参数必须在方法内赋值:



using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int[] sums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int ma, mi, su, av;
string nam;
testOutMethod(sums, out ma, out mi, out su, out av, out nam);//变量名没要求
Console.WriteLine("sums数组计算结果:max:{0},min:{1},sum:{2},avg:{3},name:{4}", ma, mi, su, av, nam);
Console.ReadKey();
//打印结果:sums数组计算结果:max:9,min:0,sum:45,avg:5,name:aaaaa
}

public static void testOutMethod(int[] sums, out int max, out int min, out int sum, out int avg, out string name)
{
max = 0;
min = 0;
sum = 0;
for (int i = 0; i < sums.Length; i++)
{
if (sums[i] > max)
{
max = sums[i];
}
if (sums[i] < min)
{
min = sums[i];
}
sum += sums[i];
}
avg = sum / sums.Length;
name = "aaaaa";
}

}
}


 4.params类型:经过params关键字修饰过的数组可以直接传值进去,不再需要专门创建一个数组传进去,缺点是自动按类型识别匹配需要放到最后面让其匹配,和java中的可变参数"..."一样


using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int sum = test("小刚", 1, 2, 3, 4, 5, 6, 7);
Console.WriteLine("sum:{0}", sum);
Console.ReadKey();
}

static int test(string name, params int[] sums)
{
int sum = 0;
for (int i = 0; i < sums.Length; i++)
{
sum += sums[i];
}
return sum;
}
}
}



*string类型转int


using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int result;
//将string类型转为int类型,如果转成功了返回true并且out参数返回转成功后的值,如果失败则返回false也out参数则返回0;
bool state = int.TryParse("123", out result);
Console.WriteLine("state:{0}\nresult{1}", state, result);
Console.ReadKey();
}


}
}


*使用io流在指定路径下创建一个txt文件并且往文件中输入内容



using System;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string content = "写入文本\n中的内容";
System.IO.File.WriteAllText(@"C:\Users\YanLong.li\Desktop\2bbbbb23.txt", content);//使用流将文件输出并写入进指定的文件夹中
Console.WriteLine("成功");
Console.ReadKey();

}
}
}


 *保留小数


c# 01 参数类型 ref,out,params_i++_02