예제 #1
0
        /// <summary>
        /// Выбор одного варианта из списка.
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="header">Header для вопроса.</param>
        /// <param name="results">Список вариантов.</param>
        /// <param name="footer">Footer для вопроса.</param>
        /// <param name="getName">Получения имени для вывода</param>
        /// <returns></returns>
        public static TResult Choose <TResult>(
            IEnumerable <TResult> results,
            Func <TResult, string> getName,
            string header = null,
            string footer = null)
        {
            var arrayResult = results.ToArray();

            if (!arrayResult.Any())
            {
                throw new ArgumentOutOfRangeException(nameof(results));
            }

            int selectedIndex;

            do
            {
                if (!string.IsNullOrEmpty(header))
                {
                    SysConsole.WriteQuestionLine(header);
                }

                for (int i = 0; i < arrayResult.Length; i++)
                {
                    SysConsole.WriteLine($"  {i + 1}) {getName(arrayResult[i])}");
                }

                if (!string.IsNullOrEmpty(footer))
                {
                    SysConsole.WriteQuestionLine(footer);
                }

                SysConsole.Write($"Number between 1 and {arrayResult.Length}: ");
                if (arrayResult.Length < 10)
                {
                    selectedIndex = (int)char.GetNumericValue(Console.ReadKey().KeyChar) - 1;
                    Console.WriteLine();
                }
                else
                {
                    var input = Console.ReadLine();
                    int.TryParse(input, out selectedIndex);
                    selectedIndex -= 1;
                }
            }while (selectedIndex < 0 || selectedIndex >= arrayResult.Length);

            SysConsole.Write("Selected: ");
            SysConsole.WriteInfoLine(getName(arrayResult[selectedIndex]));
            Console.WriteLine();

            return(arrayResult[selectedIndex]);
        }
예제 #2
0
        /// <summary>
        /// Print <see cref="XPathNodeIterator"/> value.
        /// </summary>
        /// <param name="description">Result description.</param>
        /// <param name="result">Evaluation result.</param>
        protected static void Print(string description, object result)
        {
            Console.WriteLine();
            SysConsole.WriteInfoLine(description);
            if (result == null)
            {
                return;
            }

            var iterator = result as XPathNodeIterator;

            if (iterator != null)
            {
                while (iterator.MoveNext())
                {
                    var current = iterator.Current;
                    Console.WriteLine(current.Value);
                }
            }
            else
            {
                Console.WriteLine(result);
            }
        }