Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# system.version超过3个小数点c_C#_Linq_System.version - Fatal编程技术网

C# system.version超过3个小数点c

C# system.version超过3个小数点c,c#,linq,system.version,C#,Linq,System.version,我目前收到以下错误- 版本字符串部分太短或太长 使用此语句时- records = records.OrderBy(r => new Version(r.RefNo)).ToList(); 为名为RefNo的字符串列表排序。它在25.1.2.1.2上失败,所以我假设是因为它有四个小数点?因为它可以与3…一起工作 system.version的最大四个小数点是多少 谢谢请参见 构造函数公共版本字符串版本 包含主要、次要、内部版本号和修订号的字符串, 其中每个数字都用句号“.”分隔 总共是4

我目前收到以下错误- 版本字符串部分太短或太长

使用此语句时-

records = records.OrderBy(r => new Version(r.RefNo)).ToList();
为名为RefNo的字符串列表排序。它在25.1.2.1.2上失败,所以我假设是因为它有四个小数点?因为它可以与3…一起工作

system.version的最大四个小数点是多少

谢谢

请参见

构造函数公共版本字符串版本

包含主要、次要、内部版本号和修订号的字符串, 其中每个数字都用句号“.”分隔

总共是4个数字

表示字符串限制为4个数字,5个数字将导致错误

此外,以int作为参数的构造函数仅支持1到4个参数。

A只能有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;
}

对于您的示例,此新版本字符串将被成功解析:25.1.2.12

很抱歉回复太晚,但这里是我使用的已完成扩展方法,并进行了一些修改-

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;
        }

system.version的最大四个小数点是多少?是的看一看备注版本参数只能包含主、次、构建和修订组件,按顺序排列,并用句点分隔。这些不是小数点。小数点是一个数字。通常称为句号或句点的字符,置于一组数字中,用于将数字的整数部分与小数部分分开。在其他一些上下文中,小数点可能是逗号,。值得注意的是,任何数字都不能包含超过一个小数点。我之所以试图让人们非常清楚这一点,是为了让人们意识到3.20版与3.2版不同,是3.9版之后的版本。是人们把它当作小数点分隔符,然后以某种方式创建了一个规则,忽略了后面的.s,最终不理解版本编号。蒂姆,非常感谢你的提示。我将看一看如何创建扩展方法。@bsod\在上一个代码段中是一个bug,它是:.OrderByr=>r.RefNo.TryParseVersion
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;
        }