简介

简介#

[1]:
#r "nuget:YiJingFramework.PrimitiveTypes.GuaWithFixedCount"
using YiJingFramework.PrimitiveTypes;
using YiJingFramework.PrimitiveTypes.GuaWithFixedCount;
using YiJingFramework.PrimitiveTypes.GuaWithFixedCount.Extensions;
Installed Packages
  • YiJingFramework.PrimitiveTypes.GuaWithFixedCount, 4.0.1

此包提供了一系列类型,可以表示具有固定爻数的卦,便于在编译期及时发现爻数错误。此包使用了源代码生成器技术,使用相同的模板生成了 GuaEmptyGuaWith1YaoGuaWith2YaosGuaTrigramGuaWith4YaosGuaWith5YaosGuaHexagramGuaWith7YaosGuaWith8YaosGuaWith9Yaos 十种类型,因此它们的表现会是完全相同的。

它们提供了与 Gua (在 YiJingFramework.PrimitiveTypes 中)非常类似的功能,只是额外在创建时进行了爻数检查。在它们的内部就是保存了一个 Gua ,几乎所有行为都是调用它来实现的。可以通过 AsGuaAsFixed 方法将具有固定爻数的卦和 Gua 相互转换:

[2]:
var trigram = new GuaTrigram(Yinyang.Yang, Yinyang.Yin, Yinyang.Yin);
var gua = trigram.AsGua();
var t = gua.AsFixed<GuaTrigram>();
Console.WriteLine(trigram == t);

Console.WriteLine(trigram.Equals(gua));
True
False

需注意上例中 trigram.Equals(gua) 的值为 false ,因为这些具有固定爻数的卦与 Gua 被视为完全无关的类型。它们之间不具有继承关系,不可以进行比较等操作,也不提供显式或隐式转换运算。除此之外,这些具有固定爻数的卦还不提供 ToBytesFromBytes 方法,可以先转换为 Gua 再进行操作。这种转换的开销并不大,因为它会直接返回内部的 Gua 而没有进行复制操作。

最后值得一提的是,所有的固定爻数的卦全部实现了 IGuaWithFixedCount 接口,在设计一些关于它们的方法的时候可能会比较方便,比如获取错卦,可以指定一个泛型 TGua : notnull, IGuaWithFixedCount 的参数,返回值也是相同的 TGua