C#: IntelliSense 貌似作错了一些事情。

当形参数组的类型为 object[] 时,在方法的正常形式和单个 object 形参的扩展形式之间可能产生潜在的多义性。产生此多义性的缘由是 object[] 自己可隐式转换为 object。然而,此多义性并不会形成任何问题,这是由于能够在须要时经过插入一个强制转换来解决它。数组

—CSharp Language Specification 中文版code

然而假设存在ci

static int F(params object[] objs)
{
    // do something
}

而在其余地方试图调用it

Console.WriteLine(F((object)new object[] { }));

那么它会在转换 (object) 这里爆提示io

转换是多余的。
显示可能的修补程序 (Ctrl+.)class

然而其实是否去掉这个 (object) 强制类型转换操做的结果是不同的。扩展

有强制类型转换时:object

objs
{object[1]}
   [0]: {object[0]}

(来自即时窗口)foreach

没有强制类型转换时:程序

{object[0]}

官方示例:

using System;
class Test
{
    static void F(params object[] args) {
        foreach (object o in args) {
            Console.Write(o.GetType().FullName);
            Console.Write(" ");
        }
        Console.WriteLine();
    }
    static void Main() {
        object[] a = {1, "Hello", 123.456};
        object o = a;
        F(a);
        F((object)a);
        F(o);
        F((object[])o);
    }
}

可产生输出

System.Int32 System.String System.Double
System.Object[]
System.Object[]
System.Int32 System.String System.Double

以上。