C# 如何从列表中查找最新版本号<&燃气轮机;在C中#

C# 如何从列表中查找最新版本号<&燃气轮机;在C中#,c#,linq,C#,Linq,我有一个实体类RenderingTemplates。在这里面,我有一个属性列表,它保存了渲染模板的所有版本。RenderingTemplateVersion具有一个属性VersionName,该属性将版本名存储为“version 1.0” 我正在创建一个新版本,希望找到最后一个版本号,这样我就可以将其追加1,并将新版本名设置为“版本2.0” 要做到这一点,我必须 LatestVersion = template.RenderingTemplateVersionList.OrderByDesce

我有一个实体类RenderingTemplates。在这里面,我有一个属性列表,它保存了渲染模板的所有版本。RenderingTemplateVersion具有一个属性VersionName,该属性将版本名存储为“version 1.0”

我正在创建一个新版本,希望找到最后一个版本号,这样我就可以将其追加1,并将新版本名设置为“版本2.0”

要做到这一点,我必须

LatestVersion =  template.RenderingTemplateVersionList.OrderByDescending(e => e.VersionName.Split(new char[] { ' ', '.' })[1]).First()
LatestVersion是一个整数。如何将其转换为整数。请提供帮助或建议其他方法。

我通常建议使用从
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
}


我建议你只使用这门课。然后,您可以对列表进行排序,并选择最后一项。

用于以下示例:

        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
            }
        }
int versionNo=template.RenderingTemplateVersionList.Select(v=>v.VersionName.Split(新字符[]{'','.},StringSplitOptions.removeMptyEntries.ElementAt(1))
.Catch(EnumerableEx.Return(int.MinValue.ToString(CultureInfo.InvariantCulture)))
.Let(vl=>
vl.Any(v=>v==int.MinValue.ToString(CultureInfo.InvariantCulture))?
EnumerableEx.Return(int.MinValue.ToString(CultureInfo.InvariantCulture)):vl
)
.Select(v=>Convert.ToInt32(v))
.Catch(EnumerableEx.Return(int.MinValue))
.Let(vl=>vl.Any(v=>v==int.MinValue)?enumerableleex.Return(int.MinValue):vl
.OrderByDescending(v=>v)
.DefaultIfEmpty(0)
.FirstOrDefault();
if(versionNo==int.MinValue)
{
//VersionName格式中出现错误
}
其他的
{
如果(版本号>0)
{
int newVersionNo=versionNo++;
}
其他的
{ 
//没有可用的当前版本
}
}

我知道与其他方法相比,它有点复杂和过度,但它可以通过Rx扩展来实现。如果您只想使用Linq方法链,它将特别有用。

您的意思是最新版本是字符串吗?它是否包含“Version 1.0”?如果版本是类似于1.0、2.0的东西(可能是类似于1.1、2.1等的东西),您不想将其解析为double而不是int吗?
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();
        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
            }
        }