方法的高级参数
out参数
1、如果你在一个方法中,返回多个形同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们考虑使用out参数。
out参数就侧重于在一个方法中返回多个不同类型的值,也能返回相同类型的值。
例1:不使用out参数
//写一个方法,求一个数组中的最大值、最小值、总和、平均值
Program{
static Main(string[] args){
int[] numbers = {1,2,3,4,5,3,32,5,5};
//调用GetList方法
int [] res = GetList(numbers);
Console.WriteLine("最大值{0},最小值{1},总和{2},平均值是{3}",res[0],res[1],res[3],res[4]);
Console.ReadKey();
}
public static int[] GetList(int[] nums)
{
//返回值
int[] res = new int[4];
//假设res[0]为最大值,res[1]为最小值,res[2]总和,res[3]平均值
res[0] = nums[0];//max
res[1] = nums[1];//min
res[2] = 0;//sum
for(int 1 = 0;i<nums.Length;i++)
{
if(num[i]>res[0]){res[0] = nums[i];}
if(num[i]<res[1]){res[1] = num[i];}
res[2] += nums[i];
}
//平均值
res[3] = res[2]/nums.Length;
return res;//返回值 }
}
注:以上代码中四个值都是int类型,所以可以用int[]接收。
例2:使用out参数
Program{
static void Main(string[] args){
int[] numbers = {1,2,3,4,5,3,32,5,5};
//变量需要声明、赋值、使用
int max = 0;
int min = 0;
int sum = 0;
int avg = 0;
string s;
Test(numbers,out max,out min,out sum,out avg);
Console.WriteLine(max);
Console.WriteLine(min);
Console.WriteLine(avg);
Console.WriteLine(sum);
Console.WriteLine(s);
Console.ReadKey();
}
public static void Test(int[] nums,out int max,out int min,out int avg,out int sum,out string s)//5个参数表示在方法内部多余返回回来的参数
{
//out参数要求在方法内部必须为其赋值
max = nums[0];
min = nums[0];
sum = 0;
s="";
for(int i = 0;i<nums.Length;i++)
{
if(nums[i]>max){max=nums[i];}
if(nums[i]<min){min=nums[i]}
sum += nums[i];
}
avg = sum/nums.Length;
//不需要返回值 因为void }
//分别提示用户输入用户名和密码
//写一个方法判断用户的输入是否正确
//返回给用户一个登录结果(”登录成功/失败“),并且还要单独返回用户一个登录信息
//如果用户名错误,除了返回登录结果意外,还要返回一个”用户名错误“/”密码错误“
//解析:以上需求有两个返回值:登录结果、登录信息
Program{
static void Main(string[] args){
Console.WriteLine("输入用户名:");
string UserName = Console.ReadKey();
Console.WriteLine("输入密码:");
string password = Console.ReadKey();
string msg;
bool b = IsLogin(UserName,Password,out msg);
Console.WriteLine("登录结果{0}",b);
Console.WriteLine("登录信息{0}",msg);
}
//这里我们用登录结果作为返回值
public static bool Islogin(string name.string pwd,out string msg)//在判断登陆时,需要传入name、pwd才能返回bool类型的登录结果,除此之外还需要多余返回一个msg(登录信息)
{
if(name == "admin" && pwd == "zzz123")
{
msg = "登录成功!"
return true;//因为是bool类型的返回
}
else if (name == "admin")
{
msg = "密码错误!"
return flase;
}
else if(pwd == "zzz123")
{
msg="用户名错误!"
return flase;
}
else
{
msg="未知错误!"
return flase;
}
}