| File: MetadataInformation.cs | Web Access |
| Project: src\sdk\src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompatibility\Microsoft.DotNet.ApiCompatibility.csproj (Microsoft.DotNet.ApiCompatibility) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.DotNet.ApiCompatibility { /// <summary> /// Struct containing the assembly's relevant information, used to distinguish different tuple comparisons /// and different list of <see cref="CompatDifference"/>. /// </summary> public readonly struct MetadataInformation(string assemblyName, string assemblyId, string? fullPath = null, IEnumerable<string>? references = null, string? displayString = null) : IEquatable<MetadataInformation> { private const string DEFAULT_LEFT_NAME = "left"; private const string DEFAULT_RIGHT_NAME = "right"; /// <summary> /// A default metadata information for left hand side comparison elements. /// </summary> public static readonly MetadataInformation DefaultLeft = new(DEFAULT_LEFT_NAME, DEFAULT_LEFT_NAME); /// <summary> /// A default metadata information for right hand side comparison elements. /// </summary> public static readonly MetadataInformation DefaultRight = new(DEFAULT_RIGHT_NAME, DEFAULT_RIGHT_NAME); /// <summary> /// The name of the assembly. /// </summary> public readonly string AssemblyName = assemblyName; /// <summary> /// The unique assembly id. /// </summary> public readonly string AssemblyId = assemblyId; /// <summary> /// Returns the assembly's full path or if it's part of an archive, the path to the archive. /// </summary> public readonly string FullPath = fullPath ?? assemblyId; /// <summary> /// The assembly references. /// </summary> public readonly IEnumerable<string>? References = references; /// <summary> /// The assembly's display string. /// </summary> public readonly string DisplayString = displayString ?? assemblyId; /// <inheritdoc /> public override bool Equals(object? obj) => obj is MetadataInformation information && Equals(information); /// <inheritdoc /> public bool Equals(MetadataInformation other) => string.Equals(AssemblyName, other.AssemblyName, StringComparison.OrdinalIgnoreCase) && string.Equals(AssemblyId, other.AssemblyId, StringComparison.Ordinal) && string.Equals(FullPath, other.FullPath, StringComparison.OrdinalIgnoreCase); /// <inheritdoc /> public override int GetHashCode() { return HashCode.Combine(AssemblyName, AssemblyId, FullPath); } /// <inheritdoc /> public override string ToString() => DisplayString; /// <inheritdoc /> public static bool operator ==(MetadataInformation left, MetadataInformation right) => left.Equals(right); /// <inheritdoc /> public static bool operator !=(MetadataInformation left, MetadataInformation right) => !(left == right); } }