2016-07-31 19 views
0

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?

+1

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) –

+0

Ja, ich denke, es ist :( Leider habe ich diesen Beitrag nicht gesehen, wenn ich meine Forschung vor dem Posten meiner Frage. –

Antwort

1

können Sie werfen das Argument zu einem object:

public static void Main() 
{ 
    Paramtest((object)new object[] { "hi", "wow", 78 }); 
    Console.ReadKey(); 
} 
1

Ich bin damit einverstanden, dass der Beispielcode Sie in der Dokumentation zeigte auf ein wenig Verwirrung führen kann. Hier verwenden Sie Object Array, während das Beispiel eine Integer-Array verwendet, die anders behandelt wird.

Blick auf diese Antwort, was los ist zu verstehen: C# params object[] strange behavior