简介#
[1]:
#r "nuget:YiJingFramework.PrimitiveTypes.GuaWithFixedCount"
using YiJingFramework.PrimitiveTypes;
using YiJingFramework.PrimitiveTypes.GuaWithFixedCount;
using YiJingFramework.PrimitiveTypes.GuaWithFixedCount.Extensions;
- YiJingFramework.PrimitiveTypes.GuaWithFixedCount, 4.0.1
此包提供了一系列类型,可以表示具有固定爻数的卦,便于在编译期及时发现爻数错误。此包使用了源代码生成器技术,使用相同的模板生成了 GuaEmpty 、 GuaWith1Yao 、 GuaWith2Yaos 、 GuaTrigram 、 GuaWith4Yaos 、 GuaWith5Yaos 、 GuaHexagram 、 GuaWith7Yaos 、 GuaWith8Yaos 和 GuaWith9Yaos 十种类型,因此它们的表现会是完全相同的。
它们提供了与 Gua (在 YiJingFramework.PrimitiveTypes 中)非常类似的功能,只是额外在创建时进行了爻数检查。在它们的内部就是保存了一个 Gua ,几乎所有行为都是调用它来实现的。可以通过 AsGua 和 AsFixed 方法将具有固定爻数的卦和 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 被视为完全无关的类型。它们之间不具有继承关系,不可以进行比较等操作,也不提供显式或隐式转换运算。除此之外,这些具有固定爻数的卦还不提供 ToBytes 和 FromBytes 方法,可以先转换为 Gua 再进行操作。这种转换的开销并不大,因为它会直接返回内部的 Gua 而没有进行复制操作。
最后值得一提的是,所有的固定爻数的卦全部实现了 IGuaWithFixedCount 接口,在设计一些关于它们的方法的时候可能会比较方便,比如获取错卦,可以指定一个泛型 TGua : notnull, IGuaWithFixedCount 的参数,返回值也是相同的 TGua 。