File: System\Windows\Forms\DataBinding\BindingContext.HashKey.cs
Web Access
Project: src\src\System.Windows.Forms\src\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Globalization;
 
namespace System.Windows.Forms;
 
public partial class BindingContext
{
    private class HashKey
    {
        private readonly WeakReference _wRef;
        private readonly int _dataSourceHashCode;
        private readonly string _dataMember;
 
        internal HashKey(object dataSource, string? dataMember)
        {
            ArgumentNullException.ThrowIfNull(dataSource);
            dataMember ??= string.Empty;
 
            // The dataMember should be case insensitive, so convert the
            // dataMember to lower case
            _wRef = new WeakReference(dataSource, false);
            _dataSourceHashCode = dataSource.GetHashCode();
            _dataMember = dataMember.ToLower(CultureInfo.InvariantCulture);
        }
 
        public override int GetHashCode() => HashCode.Combine(_dataSourceHashCode, _dataMember);
 
        public override bool Equals(object? target)
        {
            if (target is not HashKey keyTarget)
            {
                return false;
            }
 
            return _wRef.Target == keyTarget._wRef.Target && _dataMember == keyTarget._dataMember;
        }
    }
}