| File: RuntimeModel\RuntimeDependencySet.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; using NuGet.Shared; namespace NuGet.RuntimeModel { /// <remarks> /// Immutable. /// </remarks> public sealed class RuntimeDependencySet : IEquatable<RuntimeDependencySet> { private static readonly IReadOnlyDictionary<string, RuntimePackageDependency> EmptyDependencies = new Dictionary<string, RuntimePackageDependency>(); /// <summary> /// Package Id /// </summary> public string Id { get; } /// <summary> /// Package dependencies /// </summary> public IReadOnlyDictionary<string, RuntimePackageDependency> Dependencies { get; } public RuntimeDependencySet(string id) : this(id, (IReadOnlyDictionary<string, RuntimePackageDependency>?)null) { } public RuntimeDependencySet(string id, IEnumerable<RuntimePackageDependency>? dependencies) : this(id, dependencies?.ToDictionary(d => d.Id, StringComparer.OrdinalIgnoreCase)) { } private RuntimeDependencySet(string id, IReadOnlyDictionary<string, RuntimePackageDependency>? dependencies) { Id = id; Dependencies = dependencies is null or { Count: 0 } ? EmptyDependencies : dependencies; } public bool Equals(RuntimeDependencySet? other) { if (ReferenceEquals(this, other)) { return true; } if (other == null) { return false; } return string.Equals(other.Id, Id, StringComparison.OrdinalIgnoreCase) && Dependencies.OrderedEquals(other.Dependencies, p => p.Key, StringComparer.OrdinalIgnoreCase); } public override bool Equals(object? obj) { return Equals(obj as RuntimeDependencySet); } public override int GetHashCode() { var combiner = new HashCodeCombiner(); combiner.AddObject(Id, StringComparer.OrdinalIgnoreCase); combiner.AddDictionary(Dependencies); return combiner.CombinedHash; } public override string ToString() { return $"{Id} -> {string.Join(",", Dependencies.Select(d => d.Value.Id + " " + d.Value.VersionRange.ToString()))}"; } } }