static void Main() { Console.WriteLine("You are runnning the BasicsAndExtensions example."); Console.WriteLine("============================================"); Console.WriteLine(); #region Multi String Replace { Console.WriteLine(" Multi String Replace -----------------------"); Console.WriteLine(); string original = "a b c d"; string modified = original.Replace(("a", "aaa"), ("c", "ccc")); Console.WriteLine(" original: \"a b c d\""); Console.WriteLine($@" original.Replace((""a"", ""aaa""), (""c"", ""ccc""): ""{modified}"""); Console.WriteLine(); } #endregion #region TryParse { var(_, a) = TryParse <double>("123.4"); var(_, b) = TryParse <float>("12.3"); var(_, c) = TryParse <byte>("1"); var(_, d) = TryParse <int>("1234"); var(_, e) = TryParse <Program>("1234"); var(_, f) = TryParse <ConsoleColor>("Red"); var(_, g) = TryParse <StringComparison>("Ordinal"); Console.WriteLine(" TryParse------------------------------------"); Console.WriteLine(); Console.WriteLine($" TryParse(\"123.4\", out double a) := {a}d"); Console.WriteLine($" TryParse(\"12.3\", out float b) := {b}f"); Console.WriteLine($" TryParse(\"1\", out byte c) := {c}"); Console.WriteLine($" TryParse(\"1234\", out int d) := {d}"); Console.WriteLine($" TryParse(\"1234\", out Program e) := {e?.ToString() ?? "null"}"); Console.WriteLine($" TryParse(\"Red\", out ConsoleColor f) := {f}"); Console.WriteLine($" TryParse(\"Ordinal\", out StringComparison g) := {g}"); Console.WriteLine(); } #endregion #region Convert { // Note: the main use case for this is converting types when using generics. double a = Convert <int, double>(1234); float b = Convert <int, float>(123); int c = Convert <double, int>(123.4d); int d = Convert <float, int>(12.3f); Console.WriteLine(" Convert------------------------------------"); Console.WriteLine(); Console.WriteLine($" Convert<int, double>(1234) := {a}d"); Console.WriteLine($" Convert<int, float>(123) := {b}f"); Console.WriteLine($" Convert<double, int>(123.4d) := {c}"); Console.WriteLine($" Convert<float, int>(12.3f) := {d}"); Console.WriteLine(); } #endregion #region Stepper { Console.WriteLine(" Stepper------------------------------------"); Console.WriteLine(); Console.WriteLine(" A Towel.Stepper<T> in Towel is similar to a "); Console.WriteLine(" System.Collections.Generic.IEnumerable<T> but"); Console.WriteLine(" it uses delegates rather than an enumerator."); Console.WriteLine(" There are pros/cons to both methodologies."); Console.WriteLine(); System.Collections.Generic.IEnumerable <int> iEnumerable = Ɐ(1, 2, 3); Console.Write(" iEnumerable values:"); foreach (int value in iEnumerable) { Console.Write(" " + value); } Console.WriteLine(); Action <Action <int> > stepper = Ɐ(1, 2, 3); Console.Write(" stepper values:"); stepper(value => Console.Write(" " + value)); Console.WriteLine(); /// You can "break" a foreach loop, but you cannot break a stepper traversal. /// For this, there is another type of stepper that is breakable. "Towel.StepperBreak<T>" /// is a breakable version of the stepper. Func <Func <int, StepStatus>, StepStatus> stepperBreak = Ɐ(1, 2, 3, 4, 5, 6); Console.Write(" stepperBreak values:"); stepperBreak(value => { Console.Write(" " + value); return(value >= 3 ? Break : Continue); }); Console.WriteLine(); /// You cannot alter the values of an IEnumerable during iteration, however, /// you can do so with a "Towel.StepperRef<T>". StepperRef <int> stepperRef = Ɐ(0, 1, 2); Console.Write(" stepperRef values:"); stepperRef((ref int value) => { value++; Console.Write(" " + value); }); Console.WriteLine(); /// The "Towel.StepperRefBreak<T>" is a stepper type that allows for altering /// values and breaking iteration. StepperRefBreak <int> stepperRefBreak = Ɐ(0, 1, 2, 3, 4, 5); Console.Write(" stepperRefBreak values:"); stepperRefBreak((ref int value) => { value++; Console.Write(" " + value); return(value >= 3 ? Break : Continue); }); Console.WriteLine();
static void Main() { Console.WriteLine("You are runnning the BasicsAndExtensions example."); Console.WriteLine("============================================"); Console.WriteLine(); #region TryParse { TryParse("123.4", out double a); TryParse("12.3", out float b); TryParse("1", out byte c); TryParse("1234", out int d); TryParse("1234", out Program e); TryParse("Red", out ConsoleColor f); TryParse("Ordinal", out StringComparison g); Console.WriteLine(" TryParse------------------------------------"); Console.WriteLine(); Console.WriteLine(" TryParse(\"123.4\", out double a) := " + a + "d"); Console.WriteLine(" TryParse(\"12.3\", out float b) := " + b + "f"); Console.WriteLine(" TryParse(\"1\", out byte c) := " + c); Console.WriteLine(" TryParse(\"1234\", out int d) := " + d); Console.WriteLine(" TryParse(\"1234\", out Program e) := " + (e?.ToString() ?? "null")); Console.WriteLine(" TryParse(\"Red\", out ConsoleColor f) := " + f); Console.WriteLine(" TryParse(\"Ordinal\", out StringComparison g) := " + g); Console.WriteLine(); } #endregion #region Convert { double a = Convert <int, double>(1234); float b = Convert <int, float>(123); int c = Convert <double, int>(123.4d); int d = Convert <float, int>(12.3f); Console.WriteLine(" Convert------------------------------------"); Console.WriteLine(); Console.WriteLine(" Convert<int, double>(1234) := " + a + "d"); Console.WriteLine(" Convert<int, float>(123) := " + b + "f"); Console.WriteLine(" Convert<double, int>(123.4d) := " + c); Console.WriteLine(" Convert<float, int>(12.3f) := " + d); Console.WriteLine(); } #endregion #region Stepper { Console.WriteLine(" Stepper------------------------------------"); Console.WriteLine(); Console.WriteLine(" A Towel.Stepper<T> in Towel is similar to a "); Console.WriteLine(" System.Collections.Generic.IEnumerable<T> but"); Console.WriteLine(" it uses delegates rather than an enumerator."); Console.WriteLine(" There are pros/cons to both methodologies."); Console.WriteLine(); System.Collections.Generic.IEnumerable <int> iEnumerable = Ɐ(1, 2, 3); Console.Write(" iEnumerable values:"); foreach (int value in iEnumerable) { Console.Write(" " + value); } Console.WriteLine(); Stepper <int> stepper = Ɐ(1, 2, 3); Console.Write(" stepper values:"); stepper(value => Console.Write(" " + value)); Console.WriteLine(); /// You can "break" a foreach loop, but you cannot break a stepper traversal. /// For this, there is another type of stepper that is breakable. "Towel.StepperBreak<T>" /// is a breakable version of the stepper. StepperBreak <int> stepperBreak = Ɐ(1, 2, 3, 4, 5, 6); Console.Write(" stepperBreak values:"); stepperBreak(value => { Console.Write(" " + value); return(value >= 3 ? Break : Continue); }); Console.WriteLine(); /// You cannot alter the values of an IEnumerable during iteration, however, /// you can do so with a "Towel.StepperRef<T>". StepperRef <int> stepperRef = Ɐ(0, 1, 2); Console.Write(" stepperRef values:"); stepperRef((ref int value) => { value++; Console.Write(" " + value); }); Console.WriteLine(); /// The "Towel.StepperRefBreak<T>" is a stepper type that allows for altering /// values and breaking iteration. StepperRefBreak <int> stepperRefBreak = Ɐ(0, 1, 2, 3, 4, 5); Console.Write(" stepperRefBreak values:"); stepperRefBreak((ref int value) => { value++; Console.Write(" " + value); return(value >= 3 ? Break : Continue); }); Console.WriteLine();