3

考虑以下接口和实现它的虚拟类。

interface I<out T>
{
    System.Collections.Generic.IEnumerable<T> M()
    {
        var x = default(T);
        yield return x;
    }
}

public class C : I<string>
{
    public static void Main() => System.Linq.Enumerable.Any(((I<string>)new C()).M());
}

现在在第 6 行放置一个断点(yield return x)。执行程序,如果您尝试观看 x,您会发现一些奇怪的东西,它会告诉您以下内容:

错误 CS0570:语言不支持“<>x.<>m0(I.d__0)”

显然,该程序可以工作,因此它受到语言的支持,但调试器不知道如何处理它。async对于( Task{T}ValueTask{T}IAsyncEnumerable<T>) 返回方法也会发生这种情况。

在通常的评论流之前,这不是我的实际代码。我有一个使用默认接口成员(接口版本控制)的实际有效用例,我的实际方法更复杂并调用接口的其他成员,但 dim 是生成器方法,调试不合规的实现者是一场噩梦,我基本上不得不求助于日志消息。

4

0 回答 0