Ich habe ein einfaches Programm mit dem params
Schlüsselwort geschrieben, um Parameter zu nehmen und sie auf der Konsole zu schreiben. Was ich erreichen will/erwarte und was die C# documentation states passieren wird, wenn ich ein einzelnes Array an den Parameter mit dem params
Tag übergeben werde, ist, dass das Array das erste Element im params
Array wird. Hier ist ein Beispielcode:params Schlüsselwort ein Array als ein einziger Parameter interpretiert den Inhalt des Arrays als alle seine Parameter
public static void Main()
{
Paramtest(new object[] { "hi", "wow", 78 });
Console.ReadKey();
}
public static void Paramtest(params object[] args) {
foreach (object o in args) {
Console.WriteLine("{0} is a type of {1}.", o.ToString(), o.GetType());
}
}
Was ich sollte sehen, ist eine Zeile des Schreibens auf der Konsole, die besagt:
System.object[] is a type of System.object[].
Was ich tun sehen, ist drei Zeilen des Schreibens:
hi is a type of System.String.
wow is a type of System.String.
78 is a type of System.Int32.
Ich habe festgestellt, dass Aufruf Paramtest
mit einem anderen Parameter nach der Array wie folgt: Paramtest(new object[] { "hi", "wow", 78 }, String.Empty);
, erzeugt die beabsichtigten Ergebnisse (plus die leere Zeichenfolge), so dass es eine Möglichkeit gibt, um dieses Problem zu umgehen, aber es ist nicht elegant oder eine gute Idee in meinem Fall. Nach den Angaben in der Dokumentation sollte dies nicht passieren. Gibt es eine elegante Problemumgehung für dieses Problem?
Mögliche Duplikat [C# params offensichtlich Compiler Fehler (C# 5.0)] (http://stackoverflow.com/questions/9709642/c-sharp-params -apparent-compiler-bug-c-5-0) –
Ja, ich denke, es ist :( Leider habe ich diesen Beitrag nicht gesehen, wenn ich meine Forschung vor dem Posten meiner Frage. –