當形參數組的類型爲
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
以上。