File: System\Data\BaseCollection.cs
Web Access
Project: src\src\libraries\System.Data.Common\src\System.Data.Common.csproj (System.Data.Common)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections;
using System.ComponentModel;
using System.Globalization;
 
namespace System.Data
{
    /// <summary>
    /// Provides the base functionality for creating collections.
    /// </summary>
    public class InternalDataCollectionBase : ICollection
    {
        internal static readonly CollectionChangeEventArgs s_refreshEventArgs = new CollectionChangeEventArgs(CollectionChangeAction.Refresh, null);
 
        /// <summary>
        /// Gets the total number of elements in a collection.
        /// </summary>
        [Browsable(false)]
        public virtual int Count => List.Count;
 
        public virtual void CopyTo(Array ar, int index) => List.CopyTo(ar, index);
 
        public virtual IEnumerator GetEnumerator() => List.GetEnumerator();
 
        [Browsable(false)]
        public bool IsReadOnly => false;
 
        [Browsable(false)]
        public bool IsSynchronized => false; // so the user will know that it has to lock this object
 
        // Return value:
        // > 0 (1)  : CaseSensitve equal
        // < 0 (-1) : Case-Insensitive Equal
        // = 0      : Not Equal
        internal static int NamesEqual(string? s1, string? s2, bool fCaseSensitive, CultureInfo locale)
        {
            if (fCaseSensitive)
            {
                return string.Compare(s1, s2, false, locale) == 0 ? 1 : 0;
            }
 
            // Case, kana and width -Insensitive compare
            if (locale.CompareInfo.Compare(s1, s2, CompareOptions.IgnoreCase | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth) == 0)
            {
                return string.Compare(s1, s2, false, locale) == 0 ? 1 : -1;
            }
 
            return 0;
        }
 
 
        [Browsable(false)]
        public object SyncRoot => this;
 
        protected virtual ArrayList List => null!; // Always overridden by implementations and non-null
    }
}