c#三个高级参数之一 out

先来一个小案例:求最大值、最小值、总和、平均值

static void Main()
{
    int[] arr = { 1, 2, 3, 4, 5 };
    int[] res = GetSumAgMaxMin(arr);
    Console.WriteLine($"最大值为:{res[0]},最小值为:{res[1]},总和为:{res[2]},平均值为:{res[3]}");
    Console.ReadLine();
            
}
/// <summary>
/// 求一个数组值的最大值和最小值、总和、平均数
/// </summary>
/// <param name="value">传入的数组</param>
/// <returns>返回一个数字索引一:最大值,索引二:最小值,索引三:总和,索引四:平均数</returns>
public static int[] GetSumAgMaxMin(int[] value)
{
    int[] newArr = new int[4];
    newArr[0] = value[0]; // 假设value第一个为最大值
    newArr[1] = value[0]; //假设value第一个为最小值
    for (int i = 0; i < value.Length; i ++)
    {
        // 求最大值和最小值
        if(newArr[0] < value[i])
        {
            newArr[0] = value[i];
        }
        else
        {
            newArr[1] = value[i];
        }
        // 求总和
        newArr[2] += value[i];
    }
    // 求平均数
    newArr[3] = newArr[2] / value.Length;
    return newArr;
}

安装之前的写法,可以把结果放在一个数组中返回,但是有一个问题,如果我们需求是还要返回字符串怎么办?此时上边的板房已经满足不了我们了!

 

out参数 :

如果你在一个方法中,返回多个相同类型的值时候,可以使用数组,但是如果返回多个不同类型的值时候,返回数组是不行的,那么这个时候,我们可以考虑使用out参数。

该参数可以在一个方法中,可以返回多个不同类型的值,注:使用out时,方法可以无需返回值,但是在方法中必须为其赋值。

我们用 out 来改写上边的小练习:

static void Main()
{
    int maxparam;
    int minparam;
    int sumparam;
    int avgparam;
    bool boolparam;
    int[] arrs = { 1, 2, 3, 4, 5 };
    // 调用的时候,括号中的参数前边必须要加上out
    GetSumAgMaxMin(arrs, out maxparam, out minparam, out sumparam, out avgparam, out boolparam);
    Console.WriteLine($"最大值为:{maxparam},最小值为:{minparam},总和为:{sumparam},平均值为:{avgparam}, 返回的布尔值为:{boolparam}");
    Console.ReadLine();      
}
/// <summary>
/// 计算数组中最大值,最小值,总和,平均值
/// </summary>
/// <param name="value">传递的数组</param>
/// <param name="max">多余返回的最大值</param>
/// <param name="min">多余返回的最小值</param>
/// <param name="sum">多余返回的总和</param>
/// <param name="avg">多余返回的平均数</param>
public static void GetSumAgMaxMin(int[] value, out int max, out int min, out int sum, out int avg, out bool boolpar)
{
    //out方法的内部,必须为其赋值,因为没有返回值,但是最后在外界返接收 out 参数!
    max = value[0];
    min = value[0];
    sum = 0;
    boolpar = true;
    for (int i = 0; i < value.Length; i ++)
    {
        if (max < value[i])
        {
            max = value[i];
        }
        else
        {
            min = value[i];
        }
        sum += value[i];
    }
    avg = sum / value.Length;
}

小练习二:

判断用户登录的账号和密码是否正确,正确返回:true,提示:登陆成功;否则,false,返回登陆失败

static void Main()
{
    Console.WriteLine("请输入账号:");
    string admin = Console.ReadLine();
    Console.WriteLine("请输密码:");
    string pas = Console.ReadLine();
    bool isTrue = isLogin(admin, pas, out string msg);
    Console.WriteLine($"登陆结果:{isTrue}");
    Console.WriteLine($"登陆信息:{msg}");
    Console.ReadLine();
}
public static bool isLogin(string name, string password, out string msg)
{
    if(name == "admin" && password == "123456")
    {
        msg = "登陆成功";
        return true;
    }
    else
    {
        msg = "登录失败";
        return false;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42778001/article/details/108816297