Возможно, ваш код выглядит похожим?Я попытался извлечь его из предоставленного сообщения об ошибке ...
public IEnumerableDisposable<TItem> GetItems<TItem>()
{
var foo = new EnumandDisposeFoo(_pagedApi);
// var fooitems = foo.GetEnumerator(); // not used and is in fact of type `IEnumerator<Foo>`
return foo;
}
Если да, EnumandDisposeFoo
реализует IEnumerableDisposable<T>
при указании типа элемента T
как Foo
.На данный момент это больше не является общим .Попытка привести ( неявно ) к универсальному IEnumerableDisposable<TItem>
завершится неудачей, если вы не предоставите переопределение для этого конкретного неявного приведения.
Я сомневаюсь, что вы хотите этого.
Либовы меняете EnumandDisposeFoo
на универсальную реализацию:
public class EnumandDisposeFoo<TItem> : IEnumerableDisposable<TItem> { }
или ограничиваете свой метод, возвращая (неуниверсальный) IEnumerableDisposable<Foo>
.
Компилятор не знает, какого родатипа вы хотите вернуть, таким образом, нет ошибки во время компиляции.Вызов вашего метода с GetItems<Foo>()
, вероятно, будет успешным.Но вызов вашего метода с любым другим типом, кроме Foo
для TItem
, попытается выполнить неявное приведение во время выполнения, которое может или не может дать сбой.