当形参数组的类型为
object[]
时,在方法的正常形式和单个object
形参的扩展形式之间可能产生潜在的多义性。产生此多义性的原因是object[]
本身可隐式转换为object
。然而,此多义性并不会造成任何问题,这是因为可以在需要时通过插入一个强制转换来解决它。
—CSharp Language Specification 中文版
然而假设存在
static int F(params object[] objs)
{
// do something
}
而在其他地方试图调用
Console.WriteLine(F((object)new object[] { }));
那么它会在转换 (object)
这里爆提示
转换是多余的。
显示可能的修补程序 (Ctrl+.)
然而实际上是否去掉这个 (object)
强制类型转换操作的结果是不一样的。
有强制类型转换时:
objs {object[1]} [0]: {object[0]}
(来自即时窗口)
没有强制类型转换时:
{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
以上。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。