2013-08-02 13 views
5

Beispiel:Wie übergibt man ein Array und ein einzelnes Element an eine Methode mit mehreren Argumenten?

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

Aber es ist nicht möglich, das Verfahren zu nennen mit:

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

wir diese Methode mit aufrufen können

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

Also, wenn ich einen einzelnen String haben und ein Array von Strings, muss ich sie zuerst in ein Array setzen, um die Methode aufzurufen? Oder gibt es eine schöne Problemumgehung, um der Methode zu erklären, das Zeichenfolgenarray als einzelne Zeichenfolgen zu betrachten?

+0

Sie haben sie in ein Array setzen erste –

+0

ja, müssen Sie sie in ein Array setzen ... die Funktion Signatur übereinstimmen. Es sei denn, Sie fügen eine Wrapper-Methode hinzu, die eine Zeichenfolge und ein Array von Zeichenfolgen verwendet. –

+0

Verwenden Sie Dictionary dafür –

Antwort

0

Nur der letzte Parameter einer Methode kann ein Parameter-Array sein (params), so dass Sie nicht mehr als eine Variable in eine Methode übergeben können, deren Signatur nur params enthält.

Daher ist es nicht möglich, was Sie in C tun möchten, und Sie müssen diese Zeichenfolge in ein Array hinzufügen, oder erstellen Sie eine Überladung, die auch zuerst einen String-Parameter übernimmt.

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

Ich glaube, Sie gehen davon aus, dass string[] s ein Argument einzelnen Zeichenfolge akzeptiert sowie ein Array von Strings, die es nicht tut. Sie können dies über erreichen.

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

} 

(Denken Sie daran, params das letzte Argument sein)

Und dann aufzurufen:

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

Beachten Sie, wie das Array in erster übergeben wird, und dann das Argument, das als übergeben params.

0

Fügen Sie einfach Ihre String Array:

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

foo(newArray); 
1

Während Sie dies ohne Verwendung eines Verlängerungsverfahren lösen kann, ich mit dieser Erweiterung Methode tatsächlich empfehlen, wie ich es sehr nützlich, wenn ich ein einzelnes Objekt, sondern brauche ein IEnumerable < T> das einfach dieses einzelne Objekt zurückgibt.

Erweiterungsmethode:

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

     yield return item; 
    } 
} 

Die Erweiterungsmethode ist in vielen Szenarien nützlich. In Ihrem Fall, können Sie jetzt tun:

string[] someArray = new string[] {"test1", "test2", "test3"}; 
foo(someArray.Concat("test4".Yield()).ToArray()); 
Verwandte Themen