2010-06-18 3 views
4

한다고 가정으로 PARAMS 기능을 오버로드 스택 오버플로 예외.나는 두 가지 기능이를 IEnumerable

  1. 모호한 부분이있을 때 호출 할 오버로드를 지정할 수 있습니까?
  2. 제네릭 형식의 제약 조건이 params 형식에 대해 실행 가능한 옵션이라고 가정 할 때 params 함수를 제네릭 클래스에서 호출하는 다른 방법이 있습니까?

미리 감사드립니다.

답변

6

T[]이 아닌 INotifyPropertyChanged[]을 전달해야합니다. 일반적으로

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged 
{ 
    Foo(items.Cast<INotifyPropertyChanged>().ToArray()); 
} 

, 그러나이처럼 params 버전의 IEnumerable 버전을 호출하는 것이 좋습니다 : 예를 들어

Foo(params INotifyPropertyChanged[] items) 
{ 
    Foo((IEnumerable<INotifyPropertyChanged>) items); 
} 

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged 
{ 
    //do stuff 
} 
+0

'T []'형식을 'System.ComponentModel.INotifyPropertyChanged []'로 변환 할 수 없습니다. –

+0

@Mark : 예; 방금 해봤 어. 결정된. – SLaks

+2

후자의 옵션은 가능한 모호성을 없애기 때문에이 대답으로갑니다. 첫 번째 옵션은 더 복잡한 컴파일러입니다. – Jake

3

입력을 시도 할 수 있습니다.

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged 
{ 
    Foo(items.Cast<INotifyPropertyChanged>().ToArray()); 
} 

이것이 작동하지 않으면 나는 생각조차 모른다. 아마도 운이 없을 것이다.

+0

사용자가 제공하는 코드는 푸 과부하를 선택, 그것은 보장 스택 오버플로. – STO

+0

@ STO : 나는 그렇게 생각하지 않는다. ** 편집 ** 나는 그것을 시도했다; 그렇지 않을 것이다. – SLaks

+0

@STO : 확실합니까? 실행 해 보셨습니까? –