代码之家  ›  专栏  ›  技术社区  ›  Dutow

C#和可变数量的参数

  •  3
  • Dutow  · 技术社区  · 17 年前

    我尝试了以下代码:

    class Program: ProgParent
        {
    
            public int Max(params int[] op)
            {
                return 0;
            }
    
            public int Max(int i, params int[] op)
            {
                return 1;
            }
    
            public int Max(int i, int j, params int[] op)
            {
                return 2;
            }
    
            public static void Main(string[] args)
            {
                System.Console.WriteLine((new Program()).Max(5, 6, 7, 8));
                System.Console.ReadKey();
            }
        }
    

    它执行并使用最具体的可用功能。但编译器对此没有给出任何警告或错误。为什么?

    2 回复  |  直到 17 年前
        1
  •  4
  •   user JaredPar    14 年前

    执行重载解析时,使用参数数组的方法 可能适用于其正常形式[即传递数组]或 其扩展形式[即传递可变数量的参数]。这 方法的展开形式仅在以下情况下可用: 方法不可用,仅当方法具有相同签名时才可用

    简而言之:如果重载解析不明确,编译器会选择非参数重载。

        2
  •  2
  •   Marc Gravell    17 年前

    忽略构建错误(我把它归结为拼写错误)——你会期望或想要什么警告?它正在查找匹配的重载并使用它。。。

    严格来说,我可以通过传递数组来调用不同的重载,但是的,用法并不完全清楚。

    没有多重过载 params string.Concat + 用于发动机罩下的绳索)。