2010-12-23 115 views
0

我有一个方法要求输入<T>。它只需要这个类型定义了一个Count属性。我怎样才能将它指定为允许定义了所有对象的类型约束?C#中方法中泛型类型的约束条件#

这是我目前:

private static void writeData<T>(String fileName, T rawData) where T : ICollection 

然而,这不会,如果我尝试用IDictionary使用它。我还能尝试什么?

更新:我认为问题在于我将它限制在非通用ICollection而不是通用ICollection<E>

+0

定义“这不行”。这应该按原样工作。 – 2010-12-23 18:12:28

+0

你的意思是与IDictionary ?由于IDictionary推理ICollection – Vadim 2010-12-23 18:14:16

回答

2

您的代码应与IDictionary一起使用,因为它实现了ICollection
请注意,它不会与IDictionary<TKey, TValue>一起使用,因为它不实现(非通用)ICollection
如果你想接受泛型集合,你可以把它改成

static void WriteData<TElement>(String fileName, ICollection<TElement> rawData) 

顺便说一句,你实际上并不需要在这里使用仿制药;你只需要一个类型为ICollection的参数,调用者可以传递任何派生类型。
要采用泛型集合,您需要元素的类型参数,但不适用于集合类型。

要回答你的另一个问题,你不能通过存在一个属性来限制一个参数,除非通过创建一个接口。
由于在框架中没有ICountedEnumerable接口,所以你在那里运气不好。 (除非你制作你自己的界面,只允许实现它的自定义集合)

0

我不认为你可以在编译时做到这一点。

您可以使用反射来检查T是否有Count方法,然后调用它。

0

回应更新:然后不要传递字典。改为传递dictionaryVariable.Values