字符串.Split()会移除前导零。

3

我正在尝试拆分我的当前应用程序版本号,但它会去掉前导零。

如何更改我的拆分以保留前导零。

获取currentVersionNo:

startUpAssembly.GetName().Version.ToString()

那么针对测试:

string versionNo = "7.01.7000.0";

string[] versionInfo = versionNo.Split('.');

这将产生以下结果:
7
1 //Here i need it to be 01
7000
0

我需要它不要移除前导零。我该如何实现此功能?也许使用正则表达式有更好的解决方案吗?

3
你的示例代码无法编译-7.01.7000.0不是字符串字面量。 - Jon Skeet
1
...在你给它加上双引号之后,它就能按预期工作了。 - zerkms
2
我强烈怀疑这个问题与String.Split没有任何关系... - Jon Skeet
“这里我需要它变成01” - 为什么你想让你的代码依赖于无关紧要的字符呢? - zerkms
你提到的结果是由什么产生的?你检查了数组的内容吗? - V4Vendetta
1个回答

20

System.Version不是任意字符串,它由四个整数组成。前导零无关紧要,因此在转换回字符串时不包括前导零。这就是你丢失信息的地方 - 不是在String.Split中。您可以很容易地看到这一点:

using System;

class Test
{
    static void Main()
    {
        Version version = new Version("7.01.7000.0");
        Console.WriteLine(version); // 7.1.7000.0
    }
}

基本上,你的计划根本就有缺陷,你应该改变你的设计。你一开始就不应该试图去表示一个版本号"7.01.7000.0"。

此外,你应该退后一步,思考一下你的诊断程序:是什么让你认为是String.Split的问题呢?为什么不首先查看startUpAssembly.GetName().Version.ToString()的结果呢?


谢谢Jon。我忽略了Application.Current.GetType().Assembly.GetName().Version.ToString()返回的是7.1.7000.0 - Willem
2
@Willem:当然 - 我只是建议你对你的诊断方法进行一些反思,看看是什么让你忽略了这个问题。例如,你在问题中提供的代码并没有产生你所说的输出,因此你可能没有运行它。回顾这个特定的例子可能有助于你改进未来解决问题的方法。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接