| File: Utilities\AssemblyNameReverseVersionComparer.cs | Web Access |
| Project: src\msbuild\src\Framework\Microsoft.Build.Framework.csproj (Microsoft.Build.Framework) |
// 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.Generic; #nullable disable namespace Microsoft.Build.Shared { /// <summary> /// Compare the version numbers only for an AssemblyNameExtension and make sure they are in reverse order. This assumes the names are the same. /// </summary> internal sealed class AssemblyNameReverseVersionComparer : IComparer<AssemblyNameExtension> { /// <summary> /// A static instance of the comparer for use in a sort method /// </summary> internal static readonly IComparer<AssemblyNameExtension> GenericComparer = new AssemblyNameReverseVersionComparer(); /// <summary> /// Compare x and y by version only. /// /// Change the return value to sort the values in reverse order. /// /// If x is greater than y return -1 indicating x is less than y. /// If x is less than y return 1 indicating x is greater than y. /// If x and y are equal return 0. /// </summary> public int Compare(AssemblyNameExtension x, AssemblyNameExtension y) { if (x != null || y != null) { if (y == null) { // y should be lower than x in the sort. We need to indicate x is less than y in this case. return -1; } else if (x == null) { // y should be higher than x in the sort. We need to indicate x is greater than y in this case.. return 1; } } else { // They are both null return 0; } // We would like to compare the version numerically rather than alphabetically (because for example version 10.0.0. should above 9 not between 1 and 2) if (x.Version != y.Version) { if (y.Version == null) { // y should be lower than x in the sort. We need to indicate x is less than y in this case. return -1; } else if (x.Version == null) { // y should be higher than x in the sort. We need to indicate x is greater than y in this case.. return 1; } else { // Will not return 0 as the this != that check above takes care of the case where they are equal. // If x is greater than y we want it to return -1, if x is less than y we want 1 to be returned. int result = y.Version.CompareTo(x.Version); return result; } } return 0; } } }