当前位置:  开发笔记 > 编程语言 > 正文

如何按降序版本列表在C#中排序?

如何解决《如何按降序版本列表在C#中排序?》经验,为你挑选了1个好方法。

我有一个清单,里面有一些版本。

样本数据 :

"4.5","2.1","2.2.1","7.5","7.5.3","N/A","2.3.4.5"

正如您所看到的那样,我正在尝试按降序对列表进行排序,降序3.8.5invalidnumber&NA是无效的。

代码:

decimal result;
var sortedVData = vData.OrderByDescending(v => decimal.TryParse(v.vCode, out result) ? Convert.ToDecimal(v.vCode) : decimal.MaxValue);

输出: "NA" , "7.5.3" , '2.3.4.5' , "2.2.1" , '7.5' , '4.5' , '2.1'

正如你在我看别的(:)条件我做decimal.MaxValue,使NA前来顶部是否有无效值(用任何文本字符串),但2.2.1应该是一个例外,应该数工作(强硬2.2.1或任意数量的具有多个小数一个是从版本的角度来看无效,我希望它们有条件地有效。

预期结果 : "NA" , "7.5.3" , "7.5" , "4.5" ,"2.3.4.5" ,"2.2.1" , "2.1"



1> Tim Schmelte..:

您可以Version.TryParse对LINQ查询使用和此扩展方法:

public static Version TryGetVersion(this string item)
{
    Version ver;
    bool success = Version.TryParse(item, out ver);
    if (success) return ver;
    return null;
}

那么完整的查询很简单:

var sortedVData = vData
    .Select(v => new { Obj = v, Version = v.vCode.TryGetVersion() })
    .OrderBy(x => x.Version != null)    // first all invalid versions
    .ThenByDescending(x => x.Version)   // then by version descending
    .Select(x => x.Obj);

因此,实际上最好在类中存储版本而不是字符串。

这是更好地使用这个扩展在LINQ查询比使用本地变量。

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有