2016-07-31 24 views
0

我寫了一個簡單的程序,使用關鍵字params來獲取參數並將它們寫入控制檯。我想要/希望發生什麼,以及當我將單個數組傳遞給具有params標記的參數時,將發生什麼C# documentation states是該數組將成爲params數組中的第一個元素。下面是一些示例代碼:params關鍵字將數組作爲單個參數解釋數組的內容作爲其所有參數

public static void Main() 
    { 
     Paramtest(new object[] { "hi", "wow", 78 }); 
     Console.ReadKey(); 
    } 

    public static void Paramtest(params object[] args) { 
     foreach (object o in args) { 
      Console.WriteLine("{0} is a type of {1}.", o.ToString(), o.GetType()); 
     } 
    } 

應該看到的是,在控制檯上的一行,指出:

System.object[] is a type of System.object[]. 

做什麼看到的是三線寫作:

hi is a type of System.String. 
wow is a type of System.String. 
78 is a type of System.Int32. 

我發現在調用Paramtest後調用另一個參數數組,如下所示:Paramtest(new object[] { "hi", "wow", 78 }, String.Empty);,產生了預期的結果(加上空字符串),所以這可能是解決此問題的一種方法,但它對我而言並不是優雅或者不錯的主意。從文檔所述,這不應該發生。有沒有任何優雅解決這個問題?

+1

的可能的複製[C#PARAMS明顯的編譯器缺陷(C#5.0)](http://stackoverflow.com/questions/9709642/c-sharp-params -apparent-compiler-bug-c-5-0) –

+0

是的,我認爲它是:( 不幸的是,在發佈我的問題之前我沒有看到那篇文章。 –

回答

1

,就可以把參數的object

public static void Main() 
{ 
    Paramtest((object)new object[] { "hi", "wow", 78 }); 
    Console.ReadKey(); 
} 
1

我同意你的文檔中指出,示例代碼可能會導致嚴重的混亂情況。這裏您使用的是對象數組,而示例使用了整數數組,它的處理方式不同。

看看這個答案,明白怎麼回事:C# params object[] strange behavior