Я испытываю желание сказать, что эта проблема связана с моей общей архитектурой, но в любом случае это, вероятно, проще показать в качестве примера, чем было бы описать.
public class AppUserBase
{
}
public class AppUserAbc : AppUserBase
{
}
public class ManagerBase<T> where T : AppUserBase
{
protected AppUserCollection<T> _users = new AppUserCollection<T>();
}
public class ManagerAbc : ManagerBase<AppUserAbc>
{
}
public static class Program
{
public static void Main()
{
ManagerAbc x = new ManagerAbc();
DoSomething(x); //fails
}
public static void DoSomething<M,U>(ManagerBase<AppUserBase> manager) where M : ManagerBase<U> where U : AppUserBase
{
//do something!
}
}
Я надеюсь, что то, что я пытаюсь сделать, легко увидеть, а то, что я должен делать, мне еще легче объяснить: -).