C# 具有泛型接口的泛型方法

C# 具有泛型接口的泛型方法,c#,generics,C#,Generics,我试图创建一个泛型方法,其中类型是泛型接口 private void ShowView<T>(string viewName) where T : IView<Screen> { IRegion mainRegion = _regionManager.Regions[RegionNames.MainRegion]; T view = (T)mainRegion.GetView(viewName); if (view == null) {

我试图创建一个泛型方法,其中类型是泛型接口

private void ShowView<T>(string viewName) where T : IView<Screen>
{ 
    IRegion mainRegion = _regionManager.Regions[RegionNames.MainRegion];
    T view = (T)mainRegion.GetView(viewName);
    if (view == null)
    {
        view = _container.Resolve<T>();
        mainRegion.Add(view, viewName);
    }
    mainRegion.Activate(view);
    view.LoadData();
    view.ViewModel.IsActive = true;
}
private void ShowView(字符串视图名),其中T:IView
{ 
IRegion mainRegion=_regionManager.Regions[RegionNames.mainRegion];
T view=(T)mainRegion.GetView(viewName);
如果(视图==null)
{
视图=_container.Resolve();
添加(视图、视图名称);
}
主区域。激活(视图);
view.LoadData();
view.ViewModel.IsActive=true;
}
界面为
IView,其中T:Screen

所以我有
ConcreteView:IView
ConcreteView模型:Screen
其中Screen是基类。当我试着做ShowView(“混凝土”)我得到一个未知方法错误

是因为ConcreteView使用ConcreteViewModel而不是Screen来实现IView吗?有没有一种方法可以重写该方法以使其正常工作?

IView
不是一个
IView
,而不会给接口带来差异

interface IView<out T>
{
}
interface-IView
{
}
(可以从C#4.0开始执行上述操作)

否则,您应该能够像下面这样编写您的方法签名

void ShowView<T, U>(string viewName) where T : IView<U> where U : Screen
{
     // code
}
void ShowView(string viewName)其中T:IView其中U:Screen
{
//代码
}

并像ShowView(“废话”)一样调用它

这是因为每个通用接口都被视为不同的接口。因为.NET4.0协方差是可能的,所以您可以使用out语句.OK。我在没有指定
的情况下尝试了它,并且不断出现错误。谢谢…这就是我错过的。