如何从C#中的列表<>中找到最后一个版本号#

问题描述:

我有一个实体类RenderingTemplates。在这里我有一个属性列表,其中包含所有版本的渲染模板。 RenderingTemplateVersion有一个属性VersionName,它将版本名称存储为“版本1.0”。如何从C#中的列表<>中找到最后一个版本号#

我正在创建一个新版本,并希望找到最后一个版本no.so,我可以将它追加1并将新版本名称设置为“版本2.0”。

为了实现这一点,我有

LatestVersion = template.RenderingTemplateVersionList.OrderByDescending(e => e.VersionName.Split(new char[] { ' ', '.' })[1]).First() 

LatestVersion是一个整数。如何将其转换为整数。请帮助或建议其他方式。

+0

你的意思是LatestVersion是一个字符串?它是否包含“版本1.0”? – Sjoerd 2010-06-17 07:36:02

+0

如果版本类似于1.0,2.0(大概是1.1,2.1等),你不想将其解析为double而不是int吗? – 2010-06-17 12:41:18

我通常建议使用TryParse去从stringint

int LatestVersion; 
if (int.TryParse(template.RenderingTemplateVersionList.OrderByDescending(e => e.VersionName.Split(new char[] { ' ', '.' })[1]).First(), out LatestVersion) 
{ 
    // LatestVersion how has the version number in it 
} 

var latestVersionInteger = Convert.ToInt32(LatestVersion); 

int latestVersionInteger; 
int.TryParse(LatestVersion, latestVersionInteger); 

var versions = new[] { "Version 2.0", "Version 2.1", "Version 1.5" }; 
var highest = versions.OrderByDescending(e => new Version(e.Replace("Version", ""))).First(); 

我建议你只使用Version类。然后,您可以对您的清单进行排序并采取最后一项。

Reactive Extension需要对下面的例子:

 int versionNo = template.RenderingTemplateVersionList.Select(v => v.VersionName.Split(new char[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries).ElementAt(1)) 
                  .Catch(EnumerableEx.Return<string>(int.MinValue.ToString(CultureInfo.InvariantCulture))) 
                  .Let(vl => 
                     vl.Any(v => v == int.MinValue.ToString(CultureInfo.InvariantCulture)) ? 
                     EnumerableEx.Return<string>(int.MinValue.ToString(CultureInfo.InvariantCulture)) : vl 
                   ) 
                  .Select(v => Convert.ToInt32(v)) 
                  .Catch(EnumerableEx.Return<int>(int.MinValue)) 
                  .Let(vl => vl.Any(v => v == int.MinValue)? EnumerableEx.Return<int>(int.MinValue) : vl) 
                  .OrderByDescending(v => v) 
                  .DefaultIfEmpty(0) 
                  .FirstOrDefault(); 



     if (versionNo == int.MinValue) 
     { 
      // Error in VersionName Format 
     } 
     else 
     { 
      if (versionNo > 0) 
      { 
       int newVersionNo = versionNo++; 
      } 
      else 
      { 
       // There is no current version available 
      } 
     } 

我知道相比其他方法,但它是一项能够使用的Rx扩展来实现它是一个有点复杂和过度。如果你想只通过Linq方法链,这将特别有用。