2013-05-13 4 views
0

다음 코드 ...제네릭 클래스 선언 내에서 제네릭 형식을 사용하려면 어떻게해야합니까?

class Repository<T> where T : Func<TIn, TOut> 
{ 
//... 
} 

는 것을 불평 VS 원인 "형식 또는 네임 스페이스 이름 '주석'/ '꾼'은 찾을 수 없습니다."

이렇게 할 방법이 있습니까? 를 통해

+0

당신은 유형'T'를 제한 할 수없는'Func을 '당신은 인터페이스, 비 봉인 클래스 나 유형의 유형을 제한 canonly 때문이다. –

+0

Func 은 형식이 – Kenneth

+0

입니다. @Kenneth 죄송합니다. "형식 매개 변수"는 "형식"이 아니어야합니다. –

답변

3

Func 경우 자체가 제네릭 클래스이었다 다음 예는 수 : 그것은 단지 인터페이스/비 봉인 클래스에 의해 제한 될 수있다 그러나

class Repository<T, TIn, TOut> where T: Func<TIn, TOut> 

, 당신은 Func이 할 수 없거나 형식 매개 변수

는 다른 방법으로, 당신은 생성자 인수로의 Func을 전달할 수 있으며 작업 즉

class Repository<TIn, TOut> 
{ 
    public Repository(Func<TIn, TOut> func) 
    { 
     ... 
    } 
} 

정말 확실하지 그게 당신이 생각 계신 당신을 줄 것이라고합니다.

0

당신은 그렇지 않으면 컴파일러는

class Repository<T, TIn, TOut> where T : Func<TIn, TOut> 
{ 
    //... 
} 
0

당신은 유형을 제한 할 수 있음을했다 어디에서 파악하지 않고, 클래스의 정의에 TInTOut의 "입력"을 지정해야합니다 T 타입을 인터페이스, 비 밀폐 클래스 또는 타입 매개 변수로만 제한 할 수 있기 때문에 Func에 추가 할 수 있습니다.

당신이 그것을 할, 그것은 다음과 같을 것입니다 수 있다면 :

class Repository<T, TIn, Tout> where T: Func<TIn, TOut> 
{ 
    //... 
} 

그러나 모든 일이 운명 있도록이 Func<>로 제한 할 수 없습니다 있습니다.

컴파일러에서 오류 메시지는 다음과 같습니다

오류 1 'System.Func이'유효한 제약 조건이 아니다. 제약 조건으로 사용되는 형식은 인터페이스, 비 밀폐 된 클래스 또는 형식 매개 변수 여야합니다.

1

원하는 유형을 이미 알고 있기 때문에 제약 조건을 지정할 필요가 없습니다. 나는 당신이 원하는 것은이 생각 님의

class Repository<TIn, TOut> 
{ 
    public void someMethod(Func<TIn, TOut> func) 
    { 

    } 
} 
+0

답변과 같습니다. –

관련 문제