2013-02-08 65 views
2

有一種方法,以鑄造的T單個對象到T[]是否可以直接將元素轉換爲Array?

的何處,這將被用於一個示例中,當通過單個string到需要string[]

例的功能

void ExistingMethod(string[] sa); 
void main() 
{ 
    string s; 
    ExistingMethod(s); //<= problem is there a syntax that allows this type of cast? 
} 

在這樣

string [] singleElementArray = new string[1]; 
singleElementArray[0] = s; 
ExistingMethod(singleElementArray) 
的解決方案不感興趣

我期待看看C#是否允許這種類型的鑄造。

我以爲我看到了Java允許它通過簡單地用[]包裝它,就像([s])一樣。 C#有這種類型的語法嗎?

注意,在創造的1數組,其分配不感興趣......

+6

'foo(new [] {s})'可能是最短的。 – vcsjones 2013-02-08 20:55:16

+0

考慮添加'void foo(string s)' - 你可以用你的代碼找到有用的方式來處理轉換,並有代碼調用其中一個函數來看起來好像有你想要的魔法轉換。 – 2013-02-08 21:29:25

+0

@AlexeiLevenkov它來自一個類庫。 – 2013-02-08 21:35:38

回答

4

有沒有投地允許這樣做,但你可以

string s = "blah"; 
foo(new [] { s }); 
+0

@vcsjones你給了信息第一,但沒有回答這個問題,只有評論:( – vbbartlett 2013-02-08 21:28:33

2

C#有語法如下:

foo(new[] { s }); 
13

變化foo(string[] sa)foo(params string[] sa)

params可以讓你把一個數組,它接受一個數組參數參數數組,像這樣:的foo(foo, bar, baz);代替foo(new[]{foo, bar, baz});

或者你可以做一個.Arr<T>(this T obj)函數,它返回一個T[]。事情是這樣的:

public static T[] Arr<T>(this T obj) 
{ 
return new[]{ obj }; 
} 

,然後用它是這樣的:

foo(obj.Arr()); 
+0

我喜歡這個建議,你能否提供更多的細節,瞭解它的作用以及它如何幫助提問者? – vcsjones 2013-02-08 20:56:50

+1

params可以讓你把一個參數數組像這樣:foo(s,a,b)而不是foo(new [] {s,a,b})。 – 2013-02-08 20:58:37

+1

@ofstream,將你的評論添加到你的文章上面。 – 2013-02-08 20:59:52

2

沒有動態創建一個數組,單個字符串不是一個字符串數組,因此將其轉換爲數組是沒有意義的。你可以在這裏做最簡單的事情是:

void foo(string[] sa); 
void main() 
{ 
    string s = "some value"; // A string must have a value before you can use it 
    foo(new[]{ s }); 
} 
1

因爲你的評價是foo()從你不能修改庫的一部分,並假設FOO(州)是一個實例方法,你可以將其擴展爲接受所需的語法。

實施例最初實現的foo()類BAR:

class Bar { 
    public void foo(string[] s) { 
     foreach (var s1 in s) { 
      Console.WriteLine(s1);     
     } 
    } 
} 

你FOO()的擴展名:

static class BarExtensions { 
    public static void foo(this Bar bar, string s) { 
     bar.foo(new[] {s}); 
    } 
} 

你的示例呼叫,經修改成使用外部類:

class Program { 
    static void Main() { 
     var bar = new Bar(); 
     string s = "hello"; 
     bar.foo(s); // This is how you wanted to call it 
    } 
} 
+0

我絕對可以做這樣的事情,但我又對鑄造和語言的語法感興趣。 – vbbartlett 2013-02-08 21:43:06