2011-08-31 2 views
2

같은 함수를 만들려고 해요 TResponse는 매개 변수없는 생성자가있는 추상이 아닌 유형이어야하며이를 매개 변수 TResponse로 사용해야합니다.

  public static TResponse Run<TService, TResponse>(Controller mvcController,   IServiceController serviceController, Func<TService, TResponse> action, bool suppressErrors) 
     where TService : ICommunicationObject 
     where TResponse : ResponseBase<TResponse> 
    { 
     TResponse response = serviceController.Run<TService, TResponse>(action); 
     if (!suppressErrors) 
      response.Result.Errors.ToList().ForEach(i => mvcController.ModelState.AddModelError(UniqueKey.ValidationMessage, i.Message)); 
     return response; 
    } 

및 클래스로 정의되었습니다

TResponse 매개 변수가없는 생성자가 아닌 추상 형식이어야합니다 같이 컴파일 오류가 나타납니다. 매개 변수로 사용 TResponse

어떤 도움을 주시면 감사하겠습니다 ..

답변

7

T에 대한 new() 제약 조건을 ResponseBase<T>에 정의했지만 컴파일러에서는 일반적으로 ResponseBase<T>을 사용하는 다른 클래스에서 동일한 제약 조건을 선언해야합니다.

당신이 당신의 방법에 TResponsenew() 제약 조건을 추가하기 만하면됩니다 :이 일어나고있는 이유에 관해서는

public static TResponse Run<TService, TResponse>(Controller mvcController, IServiceController serviceController, Func<TService, TResponse> action, bool suppressErrors) 
    where TService : ICommunicationObject 
    where TResponse : ResponseBase<TResponse>, new() 
+0

사용자가 정의한 때문이다'는'에 대한'''제한 ResponseBase T'가'new()'타입이어야합니다. 이것은 당신이'T'로 넘겨주는 객체가이 제한을 필요로 함을 의미합니다. – fatty

+0

빠른 응답을 보내 주셔서 감사합니다 – Amit

+0

이 작품, 고마워. 컴파일러가 왜 new() 제약 조건을 필요로하는지 더 자세히 설명하고 싶습니다. –

관련 문제