【发布时间】:2014-11-17 13:03:04
【问题描述】:
我有时会尝试折磨 C# 编译器。今天我想出了这个:
static void CallFirst<T>(T a) where T : IEnumerable<T>
{
a.First().ToString();
}
这是一个简单的错误,因为我想创建一个以集合为参数的泛型方法,当然应该是这样的:
static void CallFirst2<T>(IEnumerable<T> a)
{
a.First().ToString();
}
无论如何,甚至可以调用CallFirst() 方法吗?每次集合通过时,集合的集合都是预期的。
如果不是,不应该认为是编译时错误吗?
【问题讨论】:
-
编译器无法知道这一点。虽然
T: IEnumerable<T>可能没有意义,但T : IComparable<T>很有意义,而且它实际上是可用的。
标签: c# generics collections constraints