Exemplo n.º 1
0
        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();
Exemplo n.º 2
0
        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();