<PackageReference Include="System.ClientModel" Version="1.7.0" />

ChangeTrackingStringList

using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace System.ClientModel.Internal { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class ChangeTrackingStringList : IList<string>, ICollection<string>, IEnumerable<string>, IEnumerable { private IList<string> _list; private bool _frozen; private bool _tracking = true; public bool HasChanged { get; set; } public string this[int index] { get { return _list[index]; } set { AssertNotFrozen(); _list[index] = value; HasChanged |= _tracking; } } public int Count => _list.Count; public bool IsReadOnly => _list.IsReadOnly; public ChangeTrackingStringList() { _list = new List<string>(); } public ChangeTrackingStringList(IEnumerable<string> collection) { _list = new List<string>(collection); } public void Freeze() { _frozen = true; } public void AssertNotFrozen() { if (_frozen) throw new InvalidOperationException("Cannot change any client pipeline options after the client pipeline has been created."); } public void Add(string item) { AssertNotFrozen(); _list.Add(item); HasChanged |= _tracking; } public void Clear() { AssertNotFrozen(); int count = _list.Count; _list.Clear(); HasChanged |= (_tracking && count != 0); } public bool Contains(string item) { return _list.Contains(item); } public void CopyTo(string[] array, int arrayIndex) { _list.CopyTo(array, arrayIndex); } public IEnumerator<string> GetEnumerator() { return _list.GetEnumerator(); } public int IndexOf(string item) { return _list.IndexOf(item); } public void Insert(int index, string item) { AssertNotFrozen(); _list.Insert(index, item); HasChanged |= _tracking; } public bool Remove(string item) { AssertNotFrozen(); bool flag = _list.Remove(item); HasChanged |= (_tracking & flag); return flag; } public void RemoveAt(int index) { AssertNotFrozen(); _list.RemoveAt(index); HasChanged |= _tracking; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }