C#

2009-09-13 10 views
5

bir parametre olarak bir yöntem çağrısında bir dize dizisi başlatılıyor?C#

DoSomething(10, {"One", "Two", "Three"}); 

Doğru (ama umarım uzun yoldan değil) ne olurdu?

cevap

16

bunu yapabilirsiniz:

DoSomething(10, new[] {"One", "Two", "Three"}); 

sağlanan tüm nesneler aynı türden sen dizi tanımında türünü belirtmek gerekmez

+2

Mükemmel! Yeni [] 'nin neden gerekli olduğunu açıklayabilir misiniz? Yaptıysam: string [] MyString = {"Bir", "Two", "Three"}; iyi çalışıyor mu? –

+1

, sözdiziminin çalıştığı yoldur. Bunu yapamazsınız: var x = string [] {"Bir", "İki", "Üç"}; ama bunu yapabilirsin y = yeni [] {"Bir", "İki", "Üç"}; –

+1

Bu makaleler çok kullanışlıdır. nesne başlatıcılar kod sooo daha temiz yaparlar http://weblogs.asp.net/scottgu/archive/2007/03/08/new-c-orcas-language-features-automatic-properties-object-initializers-and-collection-initializers .aspx ve orijinal sorunuz hakkında daha fazla bilgi için bkz. http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx#cs3spec_topic7 –

2

bu deneyin:

DoSomething(10, new string[] {"One", "Two", "Three"}); 
2

Bunu yaparken aşağıdaki şekilde iletebilirsiniz:

DoSomething(10, new string[] { "One", "Two", "Three"}); 
9

DoSomething, değiştirebileceğiniz bir işlevse, dizi oluşturmadan birden çok argümandan geçmek için params anahtar sözcüğünü kullanabilirsiniz. Ayrıca dizileri doğru bir şekilde kabul eder, dolayısıyla mevcut bir diziyi "deconstruct" yapmaya gerek yoktur.

class x 
{ 
    public static void foo(params string[] ss) 
    { 
     foreach (string s in ss) 
     { 
      System.Console.WriteLine(s); 
     } 
    } 

    public static void Main() 
    { 
     foo("a", "b", "c"); 
     string[] s = new string[] { "d", "e", "f" }; 
     foo(s); 
    } 
} 

Çıktı:

 
$ ./d.exe 
a 
b 
c 
d 
e 
f 
+0

Bu ayrıca parlak bir öneridir! –