2011-03-29 2 views
5

C#에서 리플렉션을 사용하는 동안 나중에 캐스팅되는 매개 변수의 개체 []를 전달해야합니다. 사용자가 매개 변수 값을 입력 할 수있게하는 GUI가 있습니다. 어떤 입력 유형인지 알고 있습니다. int, string, float, custom object의 인스턴스 등을 예상 할 수 있습니다. 인수가 int [] foo [] 형식의 배열 인 경우 사용자는 해당 유형의 배열을 만들 수 있습니다. 요소 추가/제거.알 수없는 유형의 배열 만들기. C#

정보를 사용할 수있는 방법은 무엇입니까 (데이터 유형이 t 유형이라는 것을 알고 있습니다.) 배열 t []를 구성하면 어떻게 호출 할 수 있는지를 알 수 있습니다. 해당 배열 유형으로 변환하십시오.

예를 들어, 현재 정수 배열을 인수로 필요로하는 함수가있는 경우 현재 정수 [NULL]로 채워진 다른 개체 []와 함께 개체 []를 전달하고 있지만, 오브젝트 []를 int []에 캐스트하면 호출이 실패합니다. 그것은 (예를 들어,로드 된 DLL에 정의 된 다른 클래스의 인스턴스)가 될 수있는 모든 가능한 유형을 예측하는 것은 불가능으로

나는

답변

12

당신이 Array.CreateInstance을 찾고 계십니까 스위치 케이스를 쓸 수 없습니다? 이 유형은 동적 유형 만 알면 유용합니다. 정적으로 알고 있지만 일반적인 방법으로 알고있는 경우 new T[10] 또는 형식 매개 변수 이름이 무엇이든간에 사용할 수 있습니다.

+2

+1 jeez = O 질문이'14 : 29 : 01Z'에서'14 : 29 : 42Z'에 응답되었습니다! – gideon

+0

음, 여기 새로 왔어. 그래서 너를 업 그레 이드 할만큼 충분한 평판이 없지만 그래. 이것은 내가 필요로하는 바로 _입니다. 고마워요! –

+0

@Steven : upvote는이 시간과 관련이 없지만 수용은 감사합니다. 감사합니다 :) –

0

이 질문에 대한 대답은 아니지만 언급할만한 조언이 될 수 있다고 생각했습니다.

int의 배열과 object의 배열을 전달하여 호출 할 수있는 메서드 인 경우 제네릭으로 표현할 수있는 형식없는 동작을 구현하는 것으로 보입니다.

IEnumerable<T>을 사용하는 일반적인 방법으로 변경하는 것이 좋습니다. 물론 IEnumerable<T>은 인덱스로 액세스 할 수 없지만 (배열에서는 가능) 실제로 필요한 것이 무엇인지 확실하지 않습니다.

MakeGenericType과 함께 사용하면 필요한 유연성을 제공 할 수 있습니다.

관련 문제