public void DispenserToRegularTest() { Dispenser dispenser = FormatParser.Parse(_testSerailNumberFormatString); var expectedPattern = @"TEST20180517-[甲乙丙][A-Z]\d\d"; var regex = dispenser.ToRegularExpression(); var target = regex.ToString(); Assert.AreEqual(expectedPattern, target); }
/// <summary> /// 設定抽號機的幾使號碼 /// </summary> /// <param name="dispenser">抽號機</param> /// <param name="startSerialNumber">起始號碼</param> public static void SetStartNumber(this Dispenser dispenser, string startSerialNumber) { var regex = dispenser.ToRegularExpression(); if (!regex.IsMatch(startSerialNumber)) { throw new FormatException($"{startSerialNumber} is not match this dispenser pattern !"); } var setableDiskIndexes = dispenser.SymbolDisks .Select((disk, index) => (disk: disk as SetableNumberDisk, index)) .Where(t => t.disk != null) .ToArray(); foreach (var setableDisk in setableDiskIndexes) { (SetableNumberDisk disk, var index) = setableDisk; var collection = disk.GetEnumerableSymbols().ToArray(); var startIndex = Array.IndexOf(collection, startSerialNumber [index]); disk.Skip = startIndex; } }