Kovarianz und IList: Erweitern von Sammlungen für Indexsuchen
In C# ermöglichen kovariante Sammlungen das Abrufen von Elementen aus einer übergeordneten Sammlung mithilfe einer untergeordneten Sammlung. Allerdings ist der Standard IEnumerable
Da List
Um dieses Problem zu beheben, führen .NET 4.5 und höher IReadOnlyList
Both List
Wenn Sie jedoch eine kovariante Sammlung mit Get- und Set-Indexern benötigen, sind die Optionen begrenzt. Eine mögliche Lösung besteht darin, die vorhandene IList
public static class Covariance { public static IIndexedEnumerable<T> AsCovariant<T>(this IList<T> tail) { return new CovariantList<T>(tail); } private class CovariantList<T> : IIndexedEnumerable<T> { private readonly IList<T> tail; public T this[int index] => tail[index]; public IEnumerator<T> GetEnumerator() => tail.GetEnumerator(); public int Count => tail.Count; } } public interface IIndexedEnumerable<out T> : IEnumerable<T> { T this[int index] { get; } int Count { get; } }
Dieser Ansatz stellt eine kovariante Sammlung bereit, die sowohl IEnumerable
Das obige ist der detaillierte Inhalt vonWie kann ich mit der Indexsuche in C# kovariante Sammlungen erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!