C#: die Konvertierung einer collection in params[]
Hier ist eine Vereinfachung von meinem code:
void Foo(params object[] args)
{
Bar(string.Format("Some {0} text {1} here {2}", /* I want to send args */);
}
string.Format
erfordert die Argumente geschickt als params
. Gibt es eine Möglichkeit, ich kann konvertieren, die args
Sammlung in die Parameter für die string.Format
Methode?
Sie nicht geben Sie den Typ der Argumente. Sollte
Er spezifiziert die Art: es ist
etwas war falsch mit entweder mein browser oder meine Augen. Ich kann schwören, es war
Hehe, nichts ist falsch mit Ihnen, ich habe einen Fehler gemacht auf den ersten, und dann habe ich korrigiert es, indem Sie die Frage 🙂 Aber Urlaub nehmen ist immer eine gute Idee 🙂
params string[] args
. Andere als die, Sie könnten nur pass es wie ein normales array. params
ist nur eine compiler-Schlüsselwort, das erstellen eines Arrays von gesendeten Parameter.Er spezifiziert die Art: es ist
object
. Warum sollte er sich einschränken, sich selbst zu string-Parameter?etwas war falsch mit entweder mein browser oder meine Augen. Ich kann schwören, es war
void Foo(params args[])
. Ich brauche Ferien 🙂Hehe, nichts ist falsch mit Ihnen, ich habe einen Fehler gemacht auf den ersten, und dann habe ich korrigiert es, indem Sie die Frage 🙂 Aber Urlaub nehmen ist immer eine gute Idee 🙂
InformationsquelleAutor Ilya Kogan | 2011-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
params
Schlüsselwort ist nur syntaktischen Zucker, die können Sie aufrufen wie eine Methode mit einer beliebigen Anzahl von Argumenten. Diejenigen allerdings, die Argumente sind immer die an die Methode übergeben als array.Dies bedeutet, dass
Foo(123, "hello", DateTime.Now)
entsprichtFoo(new object[] { 123, "hello", DateTime.Now })
.Können Sie daher übergeben Sie die Argumente von
Foo
direkt zustring.Format
wie diese:Jedoch, in diesem besonderen Fall, Sie verlangen drei Argumente (denn Sie haben {0}, {1} und {2} in Ihrem format). Daher sollten Sie den code ändern zu:
...oder wie Marcelo vorgeschlagen.
InformationsquelleAutor Mårten Wikström
Übergeben Sie Sie als ein einziges argument:
InformationsquelleAutor Marcelo Cantos
Könnten Sie versuchen, mit dem Objekt.GetType(), zum Beispiel
if (arg is DateTime)
etc.InformationsquelleAutor Brian