다음 코드 ...제네릭 클래스 선언 내에서 제네릭 형식을 사용하려면 어떻게해야합니까?
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
는 것을 불평 VS 원인 "형식 또는 네임 스페이스 이름 '주석'/ '꾼'은 찾을 수 없습니다."
이렇게 할 방법이 있습니까? 를 통해
다음 코드 ...제네릭 클래스 선언 내에서 제네릭 형식을 사용하려면 어떻게해야합니까?
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
는 것을 불평 VS 원인 "형식 또는 네임 스페이스 이름 '주석'/ '꾼'은 찾을 수 없습니다."
이렇게 할 방법이 있습니까? 를 통해
가 Func
경우 자체가 제네릭 클래스이었다 다음 예는 수 : 그것은 단지 인터페이스/비 봉인 클래스에 의해 제한 될 수있다 그러나
class Repository<T, TIn, TOut> where T: Func<TIn, TOut>
, 당신은 Func
이 할 수 없거나 형식 매개 변수
Func
을 전달할 수 있으며
것 작업 즉
class Repository<TIn, TOut>
{
public Repository(Func<TIn, TOut> func)
{
...
}
}
정말 확실하지 그게 당신이 생각 계신 당신을 줄 것이라고합니다.
당신은 그렇지 않으면 컴파일러는
class Repository<T, TIn, TOut> where T : Func<TIn, TOut>
{
//...
}
당신은 유형을 제한 할 수 있음을했다 어디에서 파악하지 않고, 클래스의 정의에 TIn
및 TOut
의 "입력"을 지정해야합니다 T
타입을 인터페이스, 비 밀폐 클래스 또는 타입 매개 변수로만 제한 할 수 있기 때문에 Func에 추가 할 수 있습니다.
당신이 그것을 할, 그것은 다음과 같을 것입니다 수 있다면 :
class Repository<T, TIn, Tout> where T: Func<TIn, TOut>
{
//...
}
그러나 모든 일이 운명 있도록이 Func<>
로 제한 할 수 없습니다 있습니다.
컴파일러에서 오류 메시지는 다음과 같습니다
오류 1 'System.Func이'유효한 제약 조건이 아니다. 제약 조건으로 사용되는 형식은 인터페이스, 비 밀폐 된 클래스 또는 형식 매개 변수 여야합니다.
원하는 유형을 이미 알고 있기 때문에 제약 조건을 지정할 필요가 없습니다. 나는 당신이 원하는 것은이 생각 님의
class Repository<TIn, TOut>
{
public void someMethod(Func<TIn, TOut> func)
{
}
}
답변과 같습니다. –
당신은 유형'T'를 제한 할 수없는'Func을'당신은 인터페이스, 비 봉인 클래스 나 유형의 유형을 제한 canonly 때문이다. –
Func은 형식이 –
Kenneth
입니다. @Kenneth 죄송합니다. "형식 매개 변수"는 "형식"이 아니어야합니다. –