<PackageReference Include="NJsonSchema" Version="10.0.3" />

CollectionProxy<TInterface, TImplementation>

public class CollectionProxy<TInterface, TImplementation> : ICollection<TInterface>, IEnumerable<TInterface>, IEnumerable where TImplementation : TInterface
using System.Collections; using System.Collections.Generic; using System.Linq; namespace NJsonSchema.Infrastructure { public class CollectionProxy<TInterface, TImplementation> : ICollection<TInterface>, IEnumerable<TInterface>, IEnumerable where TImplementation : TInterface { private readonly ICollection<TImplementation> _collection; public int Count => _collection.Count; public bool IsReadOnly => _collection.IsReadOnly; public CollectionProxy(ICollection<TImplementation> collection) { _collection = collection; } public IEnumerator<TInterface> GetEnumerator() { return Enumerable.OfType<TInterface>((IEnumerable)_collection).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public void Add(TInterface item) { _collection.Add((TImplementation)(object)item); } public void Clear() { _collection.Clear(); } public bool Contains(TInterface item) { return _collection.Contains((TImplementation)(object)item); } public void CopyTo(TInterface[] array, int arrayIndex) { _collection.CopyTo(Enumerable.ToArray<TImplementation>(Enumerable.OfType<TImplementation>((IEnumerable)array)), arrayIndex); } public bool Remove(TInterface item) { return _collection.Remove((TImplementation)(object)item); } } }