五行#
[1]:
#r "nuget:ConsoleTables"
#r "nuget:YiJingFramework.PrimitiveTypes"
using ConsoleTables;
using YiJingFramework.PrimitiveTypes;
Installed Packages
- ConsoleTables, 2.6.1
- YiJingFramework.PrimitiveTypes, 4.0.1
类型 Wuxing 表示五行木、火、土、金、水。它可以与 string 、 int 之间进行相互转化,实现了 IComparable 、 IEquatable 和 IEqualityOperators 等接口,可以正确地支持排序和比较等行为,支持使用 == 等运算符进行比较。
获取#
Wuxing 中提供了静态属性以直接获取特定五行:
[2]:
Console.WriteLine($"{Wuxing.Mu} {Wuxing.Huo:C} {Wuxing.Tu} {Wuxing.Jin:C} {Wuxing.Shui}");
Mu 火 Tu 金 Shui
Wuxing 和 string 的相互转换#
上例已经显示了可以使用 Wuxing.ToString 将其转为中文或英文的字符串形式,这边给出一个完整的表格:
[3]:
Wuxing[] wuxings = [Wuxing.Mu, Wuxing.Huo, Wuxing.Tu, Wuxing.Jin, Wuxing.Shui];
var table = new ConsoleTable("Wuxing", "G", "C");
foreach (var wuxing in wuxings)
table.AddRow($"Wuxing.{wuxing}", wuxing.ToString("G"), wuxing.ToString("C"));
table.Write(Format.Minimal);
| Wuxing | G | C |
|-------------|------|----|
| Wuxing.Mu | Mu | 木 |
| Wuxing.Huo | Huo | 火 |
| Wuxing.Tu | Tu | 土 |
| Wuxing.Jin | Jin | 金 |
| Wuxing.Shui | Shui | 水 |
其他语言不会在这个包中支持,不过自己实现一个方法也是相对方便的,也可以借助 YiJingFramework.EntityRelations 提供的扩展方法加以支持。
若要从字符串转换到五行,可以使用 Parse 或 TryParse 方法,其表现和 int、double 等内置类型基本一致,支持上述所有转换结果,不区分大小写,允许前后有空白字符:
[4]:
Console.Write(Wuxing.Parse("木 "));
Console.Write(Wuxing.Parse("hUO"));
MuHuo
Wuxing 和 int 的相互转换#
在 Wuxing 和 int 之间可以使用强制类型转换,其具体效果如下表:
[5]:
var numbers = Enumerable.Range(0 - 2, 5 + 4);
var table = new ConsoleTable("i", "w = (Wuxing)i", "(int)w");
foreach (var i in numbers)
{
var w = (Wuxing)i;
var newI = (int)w;
var star = newI == i ? ' ' : '*';
table.AddRow(i, $"{star}{w:C} {w}", newI);
}
table.Write(Format.Minimal);
| i | w = (Wuxing)i | (int)w |
|----|---------------|--------|
| -2 | *金 Jin | 3 |
| -1 | *水 Shui | 4 |
| 0 | 木 Mu | 0 |
| 1 | 火 Huo | 1 |
| 2 | 土 Tu | 2 |
| 3 | 金 Jin | 3 |
| 4 | 水 Shui | 4 |
| 5 | *木 Mu | 0 |
| 6 | *火 Huo | 1 |
这种转换一般情况下是不建议使用的,因为它并没有直接的实际意义。它主要是用于在数学上计算获取生克之类,以及便于通过 switch 进行匹配。其提供的运算符 + 和 - 也是如此。