2016-07-31 5 views
0

paramsキーワードを使用して簡単なプログラムを作成し、パラメータを取得してコンソールに書き出しました。私が欲しい/期待していることと、paramsタグを持つパラメータに1つの配列を渡したときにC# documentation statesが発生するのは、配列がparams配列の最初の要素になるということです。ここではいくつかのサンプルコードは次のとおりです。paramsキーワードは配列を単一のパラメータとして解釈し、配列の内容をすべてのパラメータとして解釈します。

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()); 
     } 
    } 

見るべきであることを述べてコンソールへの書き込みの1行です:

System.object[] is a type of System.object[]. 

私は参照を行う何が執筆の3行です

hi is a type of System.String. wow is a type of System.String. 78 is a type of System.Int32. 

私は、Paramtestを別のパラメータで配列は、Paramtest(new object[] { "hi", "wow", 78 }, String.Empty);のように、目的の結果(空文字列)を生成するので、この問題を回避する方法の1つになるかもしれませんが、私の場合はエレガントではありません。ドキュメンテーションが言っていることから、これは起こってはならない。どのようなこの問題の回避策はありますか?

+1

可能性のある重複した[C#のparamsは見かけコンパイラのバグ(C#5.0)](http://stackoverflow.com/questions/9709642/c-sharp-params -apparent-compiler-bug-c-5-0) –

+0

はい、私はそれがだと思います:( 残念ながら、私の質問を投稿する前に私の研究をしているとき、私はその投稿を見ませんでした。 –

答えて

1

あなたはobjectに引数をキャストすることができます

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

私はあなたが文書で指さサンプルコードは混乱のビットにつながることができることに同意するものとします。ここではオブジェクト配列を使用していますが、例では整数配列を使用していますが、これは異なった方法で処理されます。起こっていただきまし理解するには、この答えで

ルック:のC# params object[] strange behavior

関連する問題