2016-12-23 4 views
0

配列をパラメータとして受け入れるメソッドを定義したいと思いますが、この配列のランクは任意です。ランクは別のパラメータで指定します。何かが次のことを一般化/交換する:C#:不明なランクのメソッド配列パラメーターを定義する方法はありますか?

// one dimensional array 
public void WorkOnJaggedArray<T>(int rank, int[] dimensions, T[] data) 
{ 
    /* code */ 
} 

// two dimensional array 
public void WorkOnJaggedArray<T>(int rank, int[] dimensions, T[][] data) 
{ 
    /* code */ 
} 

// three dimensional array 
public void WorkOnJaggedArray<T>(int rank, int[] dimensions, T[][][] data) 
{ 
    /* code */ 
} 

// and so on... 

は、私はランクと渡された各次元の大きさを持っていることを考えると、私は自分のメソッド内のコードを一般化することができるはずです。私が求めていることを達成する良い方法はありますか?

+0

残念ながら、私はここで私の質問を単純化しましたが、これはもっと大きなAPIの一部になるでしょう。そして、 'data'はそのように渡される必要があります。 – mbadawi23

+0

私は混乱しています。なぜあなたは 'params'を使わないでしょうか? – Eris

+0

私の問題のためにここで 'params'がどのように使われるのかはわかりません。メソッドの呼び出し側は、パラメータの可変リストではなく、1つの*ジグザグ配列で送る必要があります。 – mbadawi23

答えて

2

あなたはどのランクのパラメータを管理するために「のSystem.Array」を使用することができます。

Array.CreateInstanceを呼び出すことによって、あなたの配列インスタンスを作成します。

これは、Arrayクラスのインスタンスを提供します。 配列に値を割り当てるにはSetValueを呼び出します。 GetValueを使用して配列の要素を取得します。

 public void WorkOnJaggedArray<T>(int rank, int[] dimensions, Array data) 
{ 
    /* code */ 
} 
+0

私の問題は、配列の次元を決定していません。私の問題は、一般的なメソッドのパラメータを定義することです。 – mbadawi23

+0

@ mbadawi23:このメソッドシグネチャでは、 'string []'や 'string [] []'や他の配列を渡すことができます。配列のランクを知っていれば、コードはそれを使って適切なデータを抽出することができます。ああ、私はこれが最近編集されていることに気づいていますが、古い答えは役に立たないと思います。しかし、はい、これは今仕事をする必要があります。 :) – Chris

関連する問題