C# 在这种情况下定义泛型类

C# 在这种情况下定义泛型类,c#,.net,generics,C#,.net,Generics,我在C#4.0中使用泛型。这是我的代码: public class Class1 { } public class SubClass1 : Class1 { } public class Class2 { } public class SubClass2 : Class2 { } public class GenericClass1<T1, T2> where T1 : Class1 where T2 : Class2 { } public class My

我在C#4.0中使用泛型。这是我的代码:

public class Class1
{
}

public class SubClass1 : Class1
{
}

public class Class2
{
}

public class SubClass2 : Class2
{
}

public class GenericClass1<T1, T2>
    where T1 : Class1
    where T2 : Class2
{
}

public class MyClass1 : GenericClass1<SubClass1, SubClass2>
{
}

// error here
public class GenericClass2<GenericClass1<T1, T2>>
    where T1 : Class1
    where T2 : Class2
{
}

public class MyClass2 : GenericClass2<MyClass1>
{
}
公共类1
{
}
公共类第1子类:第1类
{
}
公共课2
{
}
公共类子类2:类2
{
}
公共类GenericClass1
其中T1:Class1
其中T2:Class2
{
}
公共类MyClass1:GenericClass1
{
}
//这里出错
公共类GenericClass2
其中T1:Class1
其中T2:Class2
{
}
公共类MyClass2:GenericClass2
{
}
编译GenericClass2“类型参数声明必须是标识符而不是类型”时出错。任何人都可以帮我解救或者找到一个解决这个案件的办法。谢谢。

试试这个:

public class GenericClass2<TGeneric, T1, T2>
where TGeneric: GenericClass1<T1, T2>
where T1 : Class1
where T2 : Class2
{
}
公共类GenericClass2
其中TGeneric:GenericClass1
其中T1:Class1
其中T2:Class2
{
}

不幸的是,您不能在类定义中使用嵌套声明,例如:
GenericClass2
。您可以使用以下代码:

public class GenericClass1<T1, T2>
    where T1: Class1
    where T2: Class2
{
}

public class MyClass1 : GenericClass1<SubClass1, SubClass2>
{
}

public class GenericClass2<T1, T2, T3>
    where T1: Class1
    where T2: Class2
where T3:GenericClass1<T1, T2>
{
}

public class MyClass2 : GenericClass2<SubClass1, SubClass2, MyClass1>
{
}
公共类GenericClass1
其中T1:Class1
其中T2:Class2
{
}
公共类MyClass1:GenericClass1
{
}
公共类GenericClass2
其中T1:Class1
其中T2:Class2
其中T3:GenericClass1
{
}
公共类MyClass2:GenericClass2
{
}

您也可以像下面这样使用-

public class Class1
    {
    }

    public class SubClass1 : Class1
    {
    }

    public class Class2
    {
    }

    public class SubClass2 : Class2
    {
    }

    public class GenericClass1<T1, T2>
        where T1 : Class1
        where T2 : Class2
    {
    }

    public class MyClass1 : GenericClass1<SubClass1, SubClass2>
    {
    }


    public class GenericClass2<U>
        where U : GenericClass1<SubClass1, SubClass2>
    {
    }

    public class MyClass2 : GenericClass2<MyClass1>
    {
    }
公共类1
{
}
公共类第1子类:第1类
{
}
公共课2
{
}
公共类子类2:类2
{
}
公共类GenericClass1
其中T1:Class1
其中T2:Class2
{
}
公共类MyClass1:GenericClass1
{
}
公共类GenericClass2
其中U:GenericClass1
{
}
公共类MyClass2:GenericClass2
{
}

我们在这里无法处理任何问题。你没有发布你的完整代码,你没有发布你想要实现的,你甚至没有发布错误。你可以做得更好。阅读我的代码,你就会明白我的目的。编译时会出现错误。我需要一个帮助如何解决它当使用genericWhat使你认为我会打开VS并为你编译它,当你有错误的权利在你面前,可以张贴在这里?对不起。我不知道嵌套泛型,所以很难解释。我想在我的代码中使用嵌套泛型,我需要找到解决方案。你需要找到解决方案,但你甚至不能遵守基本的SO标准,比如实际发布收到的错误消息。那太糟糕了。我要走了,祝你好运找到解决你问题的办法。这个办法有效。但是,我必须重复类名两次。如您所见,MyClass1正在使用from Subclass 1和Subclass 2,但我们在MyClass2的定义中再次重复了它->为什么.net compile无法自动理解:(