我不时试图折磨C#编译器。今天我想出了这个:
static void CallFirst<T>(T a) where T : IEnumerable<T>
{
a.First().ToString();
}
这是一个简单的错误,因为我想创建将collection作为参数的泛型方法,当然应该如下所示:
static void CallFirst2<T>(IEnumerable<T> a)
{
a.First().ToString();
}
无论如何,甚至可以调用CallFirst()
方法吗?每次传递集合时,都会收集集合。
如果不是,那么它不应该被视为编译时错误吗?
答案 0 :(得分:2)
不确定
class Test : IEnumerable<Test>
{
IEnumerator<Test> IEnumerable<Test>.GetEnumerator()
{
throw new NotImplementedException();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
...
var test = new Test();
CallFirst(test);
答案 1 :(得分:0)
虽然IEnumerable<T>
,that pattern is widely used in fact(一个快速示例 - IComparable<T>
)没有意义,但是让编译器抛出错误会适得其反。