2013-08-02 59 views
5

例子:如何將數組和單個元素傳遞給多個參數方法?

public void foo(params string[] s) { ... } 

我們可以調用此方法:

a) foo("test", "test2", "test3") // multiple single strings 
b) foo(new string[]{"test", "test2", "test3"}) // string array 

但它無法調用該方法:

c) foo("test", new string[]{"test", "test2", "test3"}) 

所以當我有一個字符串和一個字符串數組,我必須先將它們放入一個數組中才能調用該方法嗎?或者是否有一個很好的解決方法來告訴該方法將字符串數組視爲單個字符串?

+0

你必須把它們放到一個數組中第 –

+0

是的,你必須把它們放進一個數組...匹配函數簽名。除非你添加一個包含一個字符串和一個字符串數組的包裝器方法。 –

+0

使用Dictionary

回答

0

只有方法的最後一個參數可以是參數數組(params),因此您不能將多個變量傳遞給僅在params中執行簽名的方法。

因此,您在C中試圖執行的操作是不可能的,您必須將該字符串添加到數組中,或者創建一個也需要首先使用字符串參數的重載。

public void foo(string firstString, params string[] s) 
{ 
} 
0

我認爲你假定string[] s接受單個字符串參數以及一個字符串數組,它沒有。你可以通過這個來實現。

public static void Test(string[] array, params string[] s) 
{ 

} 

(記住params必須是最後一個參數)

然後調用:

Test(new string[]{"test", "test2", "test3"}, "test"); 

聲明數組是如何在第一次通過,然後將其作爲傳遞的參數params

0

只需將字符串添加到陣列中:

var newArray = new string[oldArray.length+1]; 
newArray[0]=yourString; 
oldArray.CopyTo(newArray, 1); 

foo(newArray); 
1

雖然可以解決這個不使用擴展方法,其實我建議使用這種擴展方法,因爲我覺得它是非常有用的,每當我有一個單一的對象,但需要IEnumerable僅僅返回那個單個對象。

擴展方法:

public static class EnumerableYieldExtension 
{ 
    public static IEnumerable<T> Yield<T>(this T item) 
    { 
     if (item == null) 
      yield break; 

     yield return item; 
    } 
} 

擴展方法是在許多情況下是有用的。在你的情況,你現在可以這樣做:

string[] someArray = new string[] {"test1", "test2", "test3"}; 
foo(someArray.Concat("test4".Yield()).ToArray()); 
相關問題