0

我遇到了泛型类型约束的问题。我有下面的方法,我正在努力将任何东西传递给 childSegments 参数,这是我可以得到的第一个参数。

private void FillSegment<T, TT>(BaseSegment<T> segment, IEnumerable<BaseSegment<TT>> childSegments)
        where T : class
        where TT : class
    {}

TT 属于类型类,但我试图传入的列表应该是不同类的组合,而不仅仅是一个类类型,这就是我要打的墙。我可以传入这个列表:

List<BaseSegment<Lead>> l = new List<BaseSegment<Lead>>();

但就像我说的,我需要传递多个类,我有一个 LeadSegment、AccountSegment、ContactSegment 等(实现BaseSegment<T>)。

理想的情况是这样的:

List<BaseSegment<T>> lst = new List<BaseSegment<T>>();
lst.Add(LeadSegment);
lst.Add(AccountSegment);
lst.Add(ContactSegment);

<T>..并通过它,但是我相信您不能在方法内或外部创建具有类型的列表

有任何想法吗?

谢谢

4

2 回答 2

1

制作BaseSegment一个非泛型抽象类(你从不BaseSegment直接实例化吗?)。您的签名FillSegment可能如下所示:

private void FillSegment<TParent>(TParent parent, IEnumerable<BaseSegment> children)
    where TParent : BaseSegment

这使您可以使用如下方法:

var parent = new SomeParentSegment(); // SomeParentSegment derives from BaseSegment
var children = new List<BaseSegment>();
children.Add(new LeadSegment()); // LeadSegment derives from BaseSegment
children.Add(new AccountSegment()); // AccountSegment derives from BaseSegment
children.Add(new ContactSegment()); // ContactSegment derives from BaseSegment

FillSegment(parent, children);

请注意,这允许children与 具有相同的类型parent,因为这两个实例都派生自BaseSegment

于 2013-01-28T17:32:01.953 回答
0

我在遵循您想要做的事情时遇到了一些麻烦,但我认为您想要做出限制

where TT : T

或者...

where TT : BaseSegment<T>

这两种场景都支持您上面的“理想场景”;但没有进一步的了解......

于 2013-01-28T17:01:48.293 回答