2009-08-31 5 views
0

이것은 속다리는 아니지만 이전에 일치하는 질문을 찾지 못하는 것 같습니다.정확히 같은 where 절이 캐스트를 필요로하는 제네릭 메소드에서 제네릭 메소드를 호출 하시겠습니까?

내가 그것을 차례에 일반적인 방법을

public T GetSetting<T>(Guid userId) where T : ISetting, new() 

이이 정확히 일반적인 방법에 동일한 T의

public static ISetting CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new() 

서명하는 호출, 아직 컴파일러는 값을 캐스팅 나를 필요 좋아요 :

return (T) BaseSetting.CreateSetting<T>(data); 

내가 잘못하고있는 것이 맞습니까? 프레임 워크의 제한?

답변

2

메서드가 ISetting 형식을 반환하고 있습니다. T 참조는 항상 ISetting 참조이지만 ISetting 참조는 T 참조 일 필요는 없습니다. 그래서 그것을 던져야합니다.

+0

맞음 :) 감사합니다. –

1

CreateSetting의 서명은 ISetting을 반환한다고 명시합니다. 그것은 그 ISetting 당신이 캐스팅없이

public static T CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new() 

이 작동에 서명을 변경하는 경우 T 형식

이 될하는 것을 필요로하지 않는다.