2016-12-23 42 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的一部分,需要像這樣傳遞「數據」。 – mbadawi23

+0

我很困惑。你爲什麼不使用'params'? – Eris

+0

我不清楚在這裏如何使用params來解決我的問題。該方法的調用者需要發送一個*參差不齊的數組*而不是一個可變的參數列表。 – 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

相關問題