其中T:IEnumerable <T>方法约束

Bar*_*icz 5 c# generics collections constraints

我不时尝试折磨C#编译器。今天我想到了这个:

static void CallFirst<T>(T a) where T : IEnumerable<T>
{
    a.First().ToString();
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的错误,因为我想创建一个以collection为参数的通用方法,它当然应该像这样:

static void CallFirst2<T>(IEnumerable<T> a)
{
    a.First().ToString();
}
Run Code Online (Sandbox Code Playgroud)

无论如何,是否有可能调用该CallFirst()方法?每次传递集合时,都会期望集合的集合。

如果不是,是否不应该将其视为编译时错误?

Hen*_*rik 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);
Run Code Online (Sandbox Code Playgroud)