1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
   | public class SerialNumberRing {     private readonly List<string> carryRing = new List<string> {           "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",           "A", "B", "C", "D", "E", "F",     };
      public readonly List<string> CarryRing16 = new List<string> {           "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",           "A", "B", "C", "D", "E", "F",     };
      public SerialNumberRing()     {         carryRing = CarryRing16;     }     public SerialNumberRing(List<string> carryRing)     {         this.carryRing = carryRing;     }
      private string GetNextCarry(string num)     {         var index = carryRing.IndexOf(num);         if(index == carryRing.Count - 1) return carryRing[0];
          var carry = carryRing[index + 1];         return carry;     }
      public string GetNext(string numbers)     {         var currentNumberArray = numbers.ToCharArray().Select(c => c.ToString()).ToArray();         return GetNext(currentNumberArray);     }
      public string GetNext(string[] numbers)     {         int current = numbers.Length - 1;         while (current >= 0)         {             if(numbers[current] == carryRing[ carryRing.Count - 1])             {                 numbers[current] = carryRing[0];             }             else             {                 var num = numbers[current];                 var carry = GetNextCarry(num);                 numbers[current] = carry;                 break;             }             current--;         }                  string result = BuildResult(numbers);         return result;     }
      private string BuildResult(string[] numbers)     {         string result = "";         foreach (var item in numbers) result += item.ToString();         return result;     } }
 
  [TestClass()] public class UnitTestSerialNumberRingUseLoop { 	[DataRow("00000", "00001")] 	[DataRow("00009", "0000A")] 	[DataRow("0000A", "0000B")] 	[DataRow("0000F", "00010")] 	[DataRow("FFF", "000")] 	[DataRow("FFE", "FFF")] 	[DataRow("FF9", "FFA")] 	[TestMethod()] 	public void CarryNumAreEqual( 		string currentNumber, 		string expected) 	{ 		var generator = new SerialNumberRing(); 		string serialNumber = generator.GetNext(currentNumber); 		Assert.AreEqual(expected, serialNumber); 	} }
   |