Skip to content

Commit 69679eb

Browse files
committed
新增 Version 对象输出指定格式的扩展方法
1 parent 81f6b25 commit 69679eb

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using JiuLing.CommonLibs.Enums;
2+
using JiuLing.CommonLibs.ExtensionMethods;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using System;
5+
6+
namespace JiuLing.CommonLibs.UnitTests.ExtensionMethods
7+
{
8+
[TestClass()]
9+
public class VersionExtensionTests
10+
{
11+
[TestMethod()]
12+
[DataRow("1.2", VersionFormatEnum.Major, "1")]
13+
[DataRow("1.2", VersionFormatEnum.MajorMinor, "1.2")]
14+
[DataRow("1.2", VersionFormatEnum.MajorMinorBuild, "1.2.0")]
15+
[DataRow("1.2", VersionFormatEnum.MajorMinorBuildRevision, "1.2.0.0")]
16+
[DataRow("1.2.3", VersionFormatEnum.Major, "1")]
17+
[DataRow("1.2.3", VersionFormatEnum.MajorMinor, "1.2")]
18+
[DataRow("1.2.3", VersionFormatEnum.MajorMinorBuild, "1.2.3")]
19+
[DataRow("1.2.3", VersionFormatEnum.MajorMinorBuildRevision, "1.2.3.0")]
20+
[DataRow("1.2.3.4", VersionFormatEnum.Major, "1")]
21+
[DataRow("1.2.3.4", VersionFormatEnum.MajorMinor, "1.2")]
22+
[DataRow("1.2.3.4", VersionFormatEnum.MajorMinorBuild, "1.2.3")]
23+
[DataRow("1.2.3.4", VersionFormatEnum.MajorMinorBuildRevision, "1.2.3.4")]
24+
public void ToFormatVersionTest1(string input, VersionFormatEnum format, string result)
25+
{
26+
var version = new Version(input);
27+
var value = version.ToFormatString(format);
28+
Assert.AreEqual(value, result);
29+
}
30+
31+
[TestMethod()]
32+
public void ToFormatVersionTest1_ArgumentOutOfRangeException()
33+
{
34+
var exception = Assert.ThrowsException<ArgumentOutOfRangeException>(() =>
35+
{
36+
(new Version("1.2")).ToFormatString((VersionFormatEnum)0);
37+
});
38+
39+
Assert.AreEqual("format", exception.ParamName);
40+
Assert.IsTrue(exception.Message.IndexOf("无效的版本格式") >= 0);
41+
}
42+
}
43+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
namespace JiuLing.CommonLibs.Enums
2+
{
3+
/// <summary>
4+
/// 版本号展示格式
5+
/// </summary>
6+
public enum VersionFormatEnum
7+
{
8+
/// <summary>
9+
/// 主版本(1)
10+
/// 例如:1
11+
/// </summary>
12+
Major = 1,
13+
/// <summary>
14+
/// 主版本.次版本
15+
/// 例如:1.2
16+
/// </summary>
17+
MajorMinor = 2,
18+
/// <summary>
19+
/// 主版本.次版本.构建版本
20+
/// 例如:1.2.3
21+
/// </summary>
22+
MajorMinorBuild = 3,
23+
/// <summary>
24+
/// 主版本.次版本.构建版本.修订版本
25+
/// 例如:1.2.3.4
26+
/// </summary>
27+
MajorMinorBuildRevision = 4
28+
}
29+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System;
2+
using JiuLing.CommonLibs.Enums;
3+
4+
namespace JiuLing.CommonLibs.ExtensionMethods
5+
{
6+
/// <summary>
7+
/// 版本号的扩展方法
8+
/// </summary>
9+
public static class VersionExtension
10+
{
11+
/// <summary>
12+
/// 格式化版本号
13+
/// </summary>
14+
/// <param name="version">版本号</param>
15+
/// <param name="format">格式化</param>
16+
/// <returns>格式化后的版本号字符串</returns>
17+
public static string ToFormatString(this Version version, VersionFormatEnum format)
18+
{
19+
switch (format)
20+
{
21+
case VersionFormatEnum.Major:
22+
return version.Major.ToString();
23+
case VersionFormatEnum.MajorMinor:
24+
return $"{version.Major}.{version.Minor}";
25+
case VersionFormatEnum.MajorMinorBuild:
26+
return $"{version.Major}.{version.Minor}.{GetVersionBuild(version)}";
27+
case VersionFormatEnum.MajorMinorBuildRevision:
28+
return $"{version.Major}.{version.Minor}.{GetVersionBuild(version)}.{GetVersionRevision(version)}";
29+
default:
30+
throw new ArgumentOutOfRangeException(nameof(format), "无效的版本格式");
31+
}
32+
}
33+
34+
private static int GetVersionBuild(Version version)
35+
{
36+
var build = version.Build;
37+
if (build == -1)
38+
{
39+
build = 0;
40+
}
41+
return build;
42+
}
43+
private static int GetVersionRevision(Version version)
44+
{
45+
var revision = version.Revision;
46+
if (revision == -1)
47+
{
48+
revision = 0;
49+
}
50+
return revision;
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)