簡體   English   中英

system.version超過3個小數點C#

[英]system.version more than 3 decimal points c#

我目前收到以下錯誤-“版本字符串部分太短或太長”

使用此語句時-

records = records.OrderBy(r => new Version(r.RefNo)).ToList();

訂購一個稱為RefNo的字符串列表。 它在25.1.2.1.2上失敗,所以我認為是因為它有四個小數點? 因為它在3 ....下可以正常工作

是system.version的最大四個deciaml點?

謝謝

一個Version只能包含4個部分:

主要,次要,構建和修訂,以該順序排列,並全部用句點分隔。

這就是您的方法失敗的原因。 您可以創建一個擴展方法來處理這種情況,例如:

public static Version TryParseVersion(this string versionString)
{
    if (string.IsNullOrEmpty(versionString))
        return null;

    String[] tokens = versionString.Split('.');
    if (tokens.Length < 2 || !tokens.All(t => t.All(char.IsDigit)))
        return null;

    if (tokens.Length > 4)
    {
        int maxVersionLength = tokens.Skip(4).Max(t => t.Length);
        string normalizedRest = string.Concat(tokens.Skip(4).Select(t => t.PadLeft(maxVersionLength, '0')));
        tokens[3] = $"{tokens[3].PadLeft(maxVersionLength, '0')}{normalizedRest}";
        Array.Resize(ref tokens, 4);
    }

    versionString = string.Join(".", tokens);
    bool valid = Version.TryParse(versionString, out Version v);
    return valid ? v : null;
}

現在,您可以通過以下方式使用它:

records = records
   .OrderBy(r => r.RefNo.TryParseVersion())
   .ToList();

使用您的示例,新版本字符串將被解析(成功): 25.1.2.12

參見MSDN

構造函數public Version(string version)

包含主要,次要,內部和修訂版本號的字符串,其中每個數字都用句點字符('。')分隔。

總共使4個數字。

表示字符串限制為4個數字,其中5個導致錯誤。

同樣,以int為參數的構造函數僅支持1-4個參數。

很抱歉收到您的延遲回復,但這是我完成的擴展方法,並做了一些改動-

public static Version ParseRefNo(this string refNoString)
        {
            if (string.IsNullOrEmpty(refNoString))
                return null;

            String[] tokens = refNoString.Split('.');
            if (tokens.Length < 2 || !tokens.All(t => t.All(char.IsDigit)))
                return null;

            if (tokens.Length > 4)
            {
                int maxVersionLength = tokens.Skip(4).Max(t => t.Length);
                string normalizedRest = string.Concat(tokens.Skip(4).Select(t => t.PadLeft(maxVersionLength, '0')));
                tokens[3] = $"{tokens[3].PadLeft(maxVersionLength, '0')}{normalizedRest}";
                Array.Resize(ref tokens, 4);
            }

            refNoString = string.Join(".", tokens);
            Version v = null;
            bool valid = Version.TryParse(refNoString, out v);
            return valid ? v : null;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM