2009-08-12 7 views
0

다음과 유사한 함수가 있습니다. 필터를 여러 유형으로 전달할 수 있도록 수정해야합니다. 타입 매개 변수에 params/paramarray 옵션이 있다고 가정하지 않습니다.generic 형식의 params 옵션과 같은 것을 추가 할 수 있습니까?

는 는
Public Shared Function Filter(Of T)() 
    Dim results As New List(Of T) 
    For Each item In GlobalCollection.All() 
     If GetType(T).IsAssignableFrom(item.GetType()) Then 
      results.Add(instance) 
     End If 
    Next 
    Return results.ToArray() 
End Function 
는 내가 좋아하는 그것을 호출 할 수 싶습니다

: 또한

Filter(Of Car) 

과 같은 :

Filter(Of Car, Truck, Boat) 
+0

왜 세계에서 결과를 배열로 변환하고 있습니까? 그리고 함수에 대한 반환 유형을 지정해야합니다. –

+0

네, 그건 오타 일 것입니다. 실제로 Ienumerable (Of T) – adam0101

답변

4

아니, 형식 매개 변수의 수는 컴파일시에 고정되어 (제네릭 형식 및 메서드의 경우). 그러나 은 유형 매개 변수의 수로을 오버로드 할 수 있습니다. 따라서 유형이 다른 N 개의 메소드 버전을 사용할 수 있습니다.

Public Shared Function Filter()(ByVal FilterTypes As IEnumerable(Of Type)) As IList(Of Object) 

을하지만 당신은 개체의 컬렉션을 반환해야 할 것 :

당신은 기능을 만들 수

+0

을 반환하고 있기 때문에 원하는 형식으로 전달할 수 있습니다. – adam0101

+0

그건 그냥 지원되지 않습니다, 나는 두렵습니다. 나는 당신의 방법이 어쨌든 하나 이상의 유형으로 확장 될 수 있는지 즉시 알 수 없다 ... –

1

이상과 같이 보인다 (즉 Action, Action(Of T), Action(Of T1, T2) 등과 같은 약간의) .

더 나은 옵션은 유형에 따라 (인터페이스 일 수있는) 상속 구조를 정의하는 것입니다. 따라서 'Car', 'Truck'및 'Boat'유형은 모두 기본 'Vehicle'유형을 구현하거나 상속합니다.

관련 문제