2016-12-23 6 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

혼란 스럽습니다. 왜 '매개 변수'를 사용하지 않겠습니까? – 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