2012-10-03 58 views
1

我可以隱式地從C#中的單個元素創建一個數組嗎?隱式將對象轉換爲具有一個元素的數組。可能嗎?

舉例來說,我有這樣的方法

public void MyMethod(string[] arrayString) 

在我的代碼,某些時候,我有

string str = "myStr"; 
MyMethod(str) 

課程的第二臨河是一個錯誤,因爲我並正在通過的MyMethod字符串期望一個字符串[]。 有沒有乾淨的方式如果使用params陣列調用的MyMethod不使用

MyMethod(new string[] {str}) 

回答

5

,這將是罰款:

public void MyMethod(params string[] arrayString) 

string str = "myStr"; 
MyMethod(str) 
+0

這是最簡單的!謝謝! – JSBach

0

如何擴展方法?

public static T[] WrapInArray<T>(this T t) 
{ 
    return new T[]{ t }; 
} 
1

我知道會是重載方法,讓你也有

MyMethod(string) 
{ 
    return MyMethod(new string[] {str}); 
} 

你也許可以用params陣列做到這一點,但我不能完全肯定的唯一途徑如果你試圖傳遞一個字符串數組而不是多個字符串,那麼這將如何工作。

+0

您可以將一個數組傳遞給'params'參數,所以「它將如何工作」==透明。 – phoog

1

我只想補充的MyMethod

public void MyMethod(string str) 
{ 
    MyMethod(new[]{str}); 
} 
1

第二超載爲了完整起見,這裏的另一對夫婦的選擇,雖然肯定不會推薦 - 我會用params作爲公認的答案。

MyMethod(Enumerable.Repeat(str, 1).ToArray()); 

我也看到了這一點有時,儘管它很難證明,除非你數組的初始化的是不知道:這樣

T[] MakeArray<T>(params T[] elements) 
{ 
    return elements; 
} 

使用:

string[] grades = MakeArray("A", "B", "C", "D", "F", "Incomplete"); 

,或者在這種情況下:

MyMethod(MakeArray(str)); 
相關問題