File: System\Windows\Forms\DataBinding\BindingMemberInfo.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.
 
namespace System.Windows.Forms;
 
public readonly struct BindingMemberInfo : IEquatable<BindingMemberInfo>
{
    private readonly string? _dataList;
    private readonly string? _dataField;
 
    public BindingMemberInfo(string? dataMember)
    {
        dataMember ??= string.Empty;
 
        int lastDot = dataMember.LastIndexOf('.');
        if (lastDot != -1)
        {
            _dataList = dataMember[..lastDot];
            _dataField = dataMember[(lastDot + 1)..];
        }
        else
        {
            _dataList = string.Empty;
            _dataField = dataMember;
        }
    }
 
    public string BindingPath => _dataList ?? string.Empty;
 
    public string BindingField => _dataField ?? string.Empty;
 
    public string BindingMember
        => BindingPath.Length > 0
            ? $"{BindingPath}.{BindingField}"
            : BindingField;
 
    public override bool Equals(object? otherObject)
    {
        if (otherObject is not BindingMemberInfo otherMember)
        {
            return false;
        }
 
        return Equals(otherMember);
    }
 
    public bool Equals(BindingMemberInfo other)
        => string.Equals(BindingMember, other.BindingMember, StringComparison.OrdinalIgnoreCase);
 
    public static bool operator ==(BindingMemberInfo a, BindingMemberInfo b) => a.Equals(b);
 
    public static bool operator !=(BindingMemberInfo a, BindingMemberInfo b) => !a.Equals(b);
 
    public override int GetHashCode() => base.GetHashCode();
}