The Jackal Skrevet 11. november 2009 Del Skrevet 11. november 2009 Driver å imiterer Linq i .NET 2.0 her for morroskyld og stusser litt på en kompileringsfeil jeg ikke kommer rundt. public interface ILinq<T> : IEnumerable<T> { ILinq<T> Where(Predicate<T> predicate); } public class LinqList<T> : List<T>, ILinq<T> { public ILinq<T> Where(Predicate<T> predicate) { foreach(T item in this) if(predicate(item)) yield return item; } } Med dette får jeg kompileringsfeilen "The body of "Net2Linq.LinqList<T>.Where(System.Predicate<T>)' cannot be an iterator block because 'Net2Linq.ILinq<T>' is not an iterator interface type" Den er forsåvidt grei nok...men kan bare ikke fatte hvorfor den ikke godtar det siden ILinq interfacet arver fra IEnumerable<T>. Om Where metoden returnerer IEnumerable<T> så fungerer det nemlig. Lenke til kommentar
GeirGrusom Skrevet 11. november 2009 Del Skrevet 11. november 2009 yield return fungerer vel kun på IEnumerable da Lenke til kommentar
The Jackal Skrevet 11. november 2009 Forfatter Del Skrevet 11. november 2009 Vet det...men ILinq<T> interfacet mitt arver jo liksom fra IEnumerable...hvis man strengt tatt kan kalle det arv. Arver i alle fall kontrakten til IEnumerable, men kompilatoren ser jo glatt forbi det. Lenke til kommentar
GeirGrusom Skrevet 11. november 2009 Del Skrevet 11. november 2009 Ja, noen datatyper blir brukt av compileren... litt kjipt at den ikke tar med arven av IEnumerable, men det er jo strengt tatt ikke nødvendig allikevel Kanskje using blir er like teit, dersom du lager et interface som arver fra IDisposable og deretter arver det interfacet igjen i en klasse/struktur hadde det ikke overrasket meg fullstendig om den hadde klaget heller... men jeg bryr meg ikke nok til å teste. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå