我有一个基本接口,IResponse...
public interface IResponse
{
int CurrentPage { get; set; }
int PageCount { get; set; }
}
我将翻译以下内容:
...一个通用的接口,ICollectionResponse,它继承自基础接口...
public interface ICollectionResponse<T> : IResponse
{
List<T> Collection { get; set; }
}
...还有一个类EmployeesResponse,它继承了通用接口和基础接口...
public class EmployeesResponse : ICollectionResponse<Employee>
{
public int CurrentPage { get; set; }
public int PageCount { get; set; }
public List<Employee> Collection { get; set; }
}
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我的问题在这里。我有一个通用的任务方法,它返回基本接口IResponse的实例。在这个方法内部,我需要确定T是否实现了ICollectionResponse。
public class Api
{
public async Task<IResponse> GetAsync<T>(string param)
{
// **If T implements ICollectionResponse<>, do something**
return default(IResponse);
}
}
我尝试了所有版本的IsAssignableFrom()方法,但均未成功,包括:
typeof(ICollectionResponse<>).IsAssignableFrom(typeof(T))
我很感激任何反馈意见。
T
实现了多次ICollectionResponse
,应该发生什么? - Jeroen Mosterttypeof(T).GetInterfaces().Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ICollectionResponse<>))
。这段代码的丑陋和可能返回多个实例的事实表明您可能需要重新考虑此方法。例如,您可以查找一个适当类型的公共“Collection”属性 -- 这也需要反射,但没有“类型安全性”的薄膜(在这种情况下,您无法静态转换为ICollectionResponse
,因为您不知道类型参数)。 - Jeroen Mostert