C# 中把3个实参传到方法内,并排列顺序。但是我现在打印出来的数都是0,怎么都没有传进去呢?

public class drake
{
    public int Max(ref int a, ref int b, ref int c,out int min,out int medium)
    {
        int max = 0;
        medium = 0;
        min = 0;

        if (a > b && b > c)
        {
            max = a;
            medium = b;
            min = c;
        }
        if (a < b && b < c)
        {
            max = c;
            medium = b;
            min = a;
        }
        if (a > b && b < c && a > c)
        {
            max = a;
            medium = c;
            min = b;
        }
        if (a > b && b < c && a < c)
        {
            max = c;
            medium = a;
            min = b;
        }
        return max;

    }
}
class Program
{
    static void Main(string[] args)
    {
        drake c = new drake();
        int q = 5;
        int w = 9;
        int e = 6;
        int medium;
        int min;
        int max = c.Max(ref q, ref w, ref e, out min, out medium);
        Console.WriteLine(max+"+"+medium+"+"+min);


    }
}

}

分支没写全啊!3个数排列组合一共有1*2*3 = 6种结果。
又:不要漏了相等判断。

5 9 6 这个不在代码中任何一个分支,所以结果为0。

先假设不考虑相等情况(因为如果考虑相等,不能区分medium和max或者medium和min是同一个数的情况)。
应该有六个结果:
a>b>c
a>c>b
b>c>a
b>a>c
c>a>b
c>b>a

修改后的代码如下:

    public class drake
    {
        public int Max(ref int a, ref int b, ref int c, out int min, out int medium)
        {
            int max = 0;
            medium = 0;
            min = 0;

            if (a > b)//此分支处理a>b的情况
            {
                if (b > c)// a>b>c
                {
                    max = a;
                    medium = b;
                    min = c;
                }
                else if (a < c)//c>a>b
                {
                    max = c;
                    medium = a;
                    min = b;
                }
                else//a>c>b
                {
                    max = a;
                    medium = c;
                    min = b;
                }
            }

            else//此分支处理a<b的情况
            {
                if (b < c)// c>b>a
                {
                    max = c;
                    medium = b;
                    min = a;
                }
                else if (a < c)// b>c>a
                {
                    max = b;
                    medium = c;
                    min = a;
                }
                else//b>a>c
                {
                    max = b;
                    medium = a;
                    min = c;
                }
            }


            return max;

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            drake c = new drake();
            int q = 5;
            int w = 9;
            int e = 6;
            int medium;
            int min;
            int max = c.Max(ref q, ref w, ref e, out min, out medium);
            Console.WriteLine(max + "+" + medium + "+" + min);
        }
    }