如何从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是一个整数。如何将其转换为整数。请帮助或建议其他方式。
答
我通常建议使用TryParse
去从string
到int
:
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();
答
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方法链,这将特别有用。
你的意思是LatestVersion是一个字符串?它是否包含“版本1.0”? – Sjoerd 2010-06-17 07:36:02
如果版本类似于1.0,2.0(大概是1.1,2.1等),你不想将其解析为double而不是int吗? – 2010-06-17 12:41:18