2012-10-20 154 views
1

我正在刷新我的C#技能並閱讀C#書籍。我在數組章節中遇到了params關鍵字。爲什麼任何人都會使用params關鍵字而不是將常規數組傳遞給方法。我測試了這兩種傳遞數組的方法,這些方法都使用了params關鍵字。他們都很好。有沒有真正的世界理由使用關鍵字params爲什麼使用params關鍵字

這裏是我的代碼:

using System; 

namespace ConsoleApplication9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] classname = new string[5] { "cs150", "cs250", "cs270", "cs300", "cs350" }; 
      Prints(classname); 

      Console.Read(); 
     } 

     public static void Prints(params string[] t) 
     { 
      foreach (var s in t) 
      { 
       Console.WriteLine(s); 
      } 
     } 
    } 
} 

這裏是沒有PARAMS代碼:

using System; 

namespace ConsoleApplication9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] classname = new string[5] { "cs150", "cs250", "cs270", "cs300", "cs350" }; 
      Prints(classname); 

      Console.Read(); 
     } 

     public static void Prints(string[] t) 
     { 
      foreach (var s in t) 
      { 
       Console.WriteLine(s); 
      } 
     } 
    } 
} 
+0

在傳遞給方法的參數數量可變的情況下,params關鍵字很有用。它基本上說,「嘿,他們是否發送1個字符串或100個字符串到這個方法,對待他們是相同的*」(注意事項比比皆是)。它只能是方法的最後一個參數。 –

+0

這就是* params *關鍵字的作用。它被稱爲「語法糖」。它很甜。否則,爲了保持C和C++程序員的快樂,他們習慣了這種語言。 –

回答

11

你找哪家這些調用Console.WriteLine的更清晰?

Console.WriteLine("Hello {0}, you are {1}", person.Name, person.Age); 

Console.WriteLine("Hello {0}, you are {1}", 
        new object[] { person.Name, person.Age }); 

(你甚至不能使用隱式類型的數組(new[])在上述情況下,除非任何person.Nameperson.Ageobject型的......如果他們兩個類型string你會沒事的,但它會創建一個字符串數組...)

我更喜歡第一個。閱讀起來很簡單。這就是params - 它只是允許調用者使用更簡潔的語法。您還可以通過正常的方式數組引用,因爲你在你的代碼做 - 但你可以只寫:

Prints("cs150", "cs250", "cs270", "cs300", "cs350"); 

...這又是比簡單聲明一個單獨的變量讀。

2

使用參數就可以調用的方法,而無需創建數組:

Prints("cs150", "cs250", "cs270") 
+5

那麼,沒有*明確*創建一個數組。該數組仍然被創建,它只是隱式地完成。 –

+0

@JonSkeet true,但這個骯髒的工作是由編譯器完成的:) –

+0

那麼,仍然有工作在執行時間完成 - 這是我的觀點。數組仍在創建和填充。在對性能敏感的代碼中,最好有幾個重載來避免這種情況。 –

4

使用參數,你可以打電話給你的方法是這樣的:

Prints("1", "2", "3", "4", "5"); 

沒有參數,可以不可以。

此外,可以調用該方法以與陣列在這兩種情況下的參數:

Prints(new string[] { "1", "2", "3", "4", "5" }); 

也就是說,則params允許您使用快捷方式調用該方法時。

0

params關鍵字的目的是

簡化編碼經驗給誰消耗你cretaed庫或 方法編碼。

0

如果你傳遞的參數沒有「params」關鍵字,那麼你只能傳遞數組(數組大小)中指定的元素,但使用「params」你不需要指定數組中的數組(數組大小)並可以根據需要從調用函數傳遞任意數量的參數。

相關問題