C# 如何在泛型类定义中指定2个位置 公共类GenericBuildService,其中T:IList

C# 如何在泛型类定义中指定2个位置 公共类GenericBuildService,其中T:IList,c#,generics,C#,Generics,我还需要确保任何传入的T2都实现了INode 当我已经在这里为IList指定了一个where时,不确定如何指定它 更新: 我只是想进一步澄清我的目标是什么。我需要这个服务类需要一个IList,还需要一个myCustomType的rootNode,因为出于各种原因,我需要能够在这个类中的各种方法中使用这两种方法…所以我尝试像这样发送这些实例,但显然我还没有正确地构建我的类定义,因为我不喜欢使用它类别: public class GenericBuildService<T, T2> wh

我还需要确保任何传入的T2都实现了INode

当我已经在这里为IList指定了一个where时,不确定如何指定它

更新:

我只是想进一步澄清我的目标是什么。我需要这个服务类需要一个IList,还需要一个myCustomType的rootNode,因为出于各种原因,我需要能够在这个类中的各种方法中使用这两种方法…所以我尝试像这样发送这些实例,但显然我还没有正确地构建我的类定义,因为我不喜欢使用它类别:

public class GenericBuildService<T, T2> where T : IList<T2>
Node rootNode=新节点(\u rootNode);
var builder=新的GenericBuildService(_依赖项,根节点);
所以我尝试发送一个IList,它只是一个FieldDependency实例列表,还尝试发送一个rootNode,它是Node类型

因此,我不太确定我的类定义是否恰好适合构建服务类,有人知道如何解决这个问题吗?

您可以指定多个约束,每个类型参数一个约束:

Node<FieldDependency> rootNode = new Node<FieldDependency>(_rootNode);
            var builder = new GenericBuildService<IList<FieldDependency>, FieldDependency>(_dependencies, rootNode);
公共类GenericBuildService
其中T:IList
其中T2:INode
{
}

您可以在方法和属性的泛型类型中使用类型参数。例如,如果您有一个接受
IList
的方法,其中
T
是您的类型参数,那么您只需执行以下操作:

public class GenericBuildService<T, T2>
    where T : IList<T2>
    where T2 : INode
{
}

要为不同类型参数指定多个,可以重复
where
关键字:

GenericBuildService(IList<MyNode> dependencies, MyNode rootNode);

要在单个类型参数上指定多个约束,请用逗号分隔它们。首先指定特殊约束(
struct
class
),在接口之前指定类约束,最后指定
new()

GenericBuildService(ReadOnlyCollection<MyNode> dependencies, MyNode rootNode);

谢谢,我还是不明白为什么我要做t:IList来让这个东西“快乐”@CoffeeAddict你不需要
t:IList
来让编译器快乐。相反,您可以直接将代码中的
T
替换为
IList
,然后将
T
全部删除。我更新了我的帖子。
public class GenericBuildService<T, T2>
    where T : INode
    where TList : IList<T>
{
    GenericBuildService(TList dependencies, T rootNode);
}
GenericBuildService(ReadOnlyCollection<MyNode> dependencies, MyNode rootNode);
public class GenericBuildService<T, T2>
    where T : class, IList<T2>, new()
{
}
public class MyClass<T>
{
}