考虑以下接口和实现它的虚拟类。
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 是生成器方法,调试不合规的实现者是一场噩梦,我基本上不得不求助于日志消息。