2012-10-20 114 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”你不需要指定数组中的数组(数组大小)并可以根据需要从调用函数传递任意数量的参数。

相关问题