代码之家  ›  专栏  ›  技术社区  ›  joveice

C#如何比较版本?

  •  3
  • joveice  · 技术社区  · 8 年前

    如何比较两个版本号?

    我不想要简单的1.0.0.0,但我想比较一下

    1.0.0.1

    1.0.0.1rc1/1.0.0.1-rc1

    1.0.0.1b

    1.0.0.1a/1.0.0.1-a

    等等

    它们是按照最新的方向订购的。

    引自PHP。net的函数来实现我想要的

    version\u compare()比较两个“PHP标准化”版本号字符串。 函数首先用点替换\-和+。在版本字符串中,并插入点。在任何非数字之前和之后,例如“4.3.2RC1”变为“4.3.2”。钢筋混凝土。1’。然后从左到右比较各个部分。如果部件包含特殊版本字符串,则按以下顺序处理:此列表中未找到的任何字符串<开发(<);alpha=a<β=b<RC=RC<#<pl=p。这样不仅可以比较“4.1”和“4.1.2”等不同级别的版本,还可以比较任何包含开发状态的PHP特定版本。

    如何做到这一点?

    或者默认情况下是否存在类似的情况?

    4 回复  |  直到 5 年前
        1
  •  9
  •   M.Hassan    8 年前

    使用 semantic version library for .Net

    要安装软件包,请执行以下操作:

     Install-Package semver
    

    您可以分析/比较版本。

    示例1:比较

         var v1 = new SemVersion(1, 0, 0, "rc1");
         Console.WriteLine(v1);
         var v2 = new SemVersion(1, 0, 0, "rc2");
         Console.WriteLine(v2);
         var r = SemVersion.Compare(v1,v2);
         //If v1 < v2   return -1
         //if v1 > v2   return +1
         //if v1 = v2   return 0
         Console.WriteLine(r); // -1
    

    示例2:解析

         var version = SemVersion.Parse("1.2.45-alpha-beta+nightly.23.43-bla");
        Console.WriteLine(version);
        Console.WriteLine( version.Major); //1
        Console.WriteLine( version.Minor); //2
        Console.WriteLine( version.Patch); //45
        Console.WriteLine(version.Prerelease); //alpha-beta
        Console.WriteLine(version.Build); //nightly.23.43
    

    更新时间:

    中的生活演示 fiddle

        2
  •  0
  •   lindexi    7 年前

    另一种方法是使用yadyn的语义版本

    您可以单击 here 复制代码。

    您还可以从 git tool 有100多个贡献者。

        3
  •  0
  •   Bill Tarbell    5 年前

    与其使用第三方的库,不如只参考 努吉。果心 并利用其 语义版本 班此类的工作方式与中的标准版本对象非常相似。net,但遵守语义版本规范( https://semver.org )。它将把字符串解析为一个IComparable和IEquatable对象,以便您可以比较多个版本或在一个集合中对其排序,等等。

    努吉。核心: https://www.nuget.org/packages/nuget.core/ (您可以通过nuget拉取此库)

    https://github.com/NuGet/NuGet2/blob/2.13/src/Core/SemanticVersion.cs

    var rawVersions = new [] {"v1.4.0", "v1.4.0-patch10", "v1.4.0-patch2"};
    var versions = rawVersions.Select(v => new SemanticVersion(v));
    var sorted = versions.ToList().Sort();
    
        4
  •  0
  •   CTAJIUH    5 年前

    我的功能是比较两个版本。版本示例“1.22.333.4444”

    static int CompareVersions(string First, string Second)
    {
        var IntVersions = new List<int[]>
        {
            Array.ConvertAll(First.Split('.'), int.Parse),
            Array.ConvertAll(Second.Split('.'), int.Parse)
        };
        var Cmp = IntVersions.First().Length.CompareTo(IntVersions.Last().Length);
        if (Cmp == 0)
            IntVersions = IntVersions.Select(v => { Array.Resize(ref v, IntVersions.Min(x => x.Length)); return v; }).ToList();
        var StrVersions = IntVersions.ConvertAll(v => string.Join("", Array.ConvertAll(v,
                            i => { return i.ToString($"D{IntVersions.Max(x => x.Max().ToString().Length)}"); })));
        var CmpVersions = StrVersions.OrderByDescending(i => i).ToList();
        return CmpVersions.First().Equals(CmpVersions.Last()) ? Cmp : CmpVersions.First().Equals(StrVersions.First()) ? 1 : -1;
    }
    
    第一个(>);第二 1.
    第一个==第二个 0
    第一个(<);第二 -1个