Рассмотрим следующий интерфейс и фиктивный класс, который его реализует.
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)' is не поддерживается языком
Очевидно, что программа работает, поэтому она поддерживается языком, но отладчик понятия не имеет, что с ним делать. Это также происходит для async
(Task{T}
, ValueTask{T}
или IAsyncEnumerable<T>
) методов возврата.
Перед обычным потоком комментариев это НЕ мой фактический код. У меня есть действительный допустимый вариант использования для использования элемента интерфейса по умолчанию (управление версиями интерфейса), мой фактический метод более сложен и вызывает другие члены интерфейса, но dim - это метод генератора, а отладка плохо совместимой реализации - это кошмар. и мне по сути пришлось прибегнуть к регистрации сообщений.