C# 中方法的菜单

本文关键字:菜单 方法 | 更新日期: 2023-09-27 18:32:44

我一直在学习C#,现在我有一些作业要做。在java中,我在bluej IDE中为每个练习创建类,但是搜索并询问了一些朋友,他们告诉我这在C#上无法完成。所以我需要一个菜单。大约有 100 个练习,所以我不想使用 Switch-Case。

我想要这样的东西:

    class Program{
        public static void Main(String[] args){
        int opt;
        Console.WriteLine("program name");
        Console.WriteLine();
        Console.WriteLine("1. exercise 1");
        Console.WriteLine("2. exercise 2");
        Console.WriteLine("3. exercise 3");
        Console.WriteLine("4. exercise 4"); // to 100
        Console.WriteLine();
        Console.WriteLine("Choose exercise number: ");
        opt = int.Parse(Console.ReadLine());
        //then call the exercise#
        Exercise + opt + ();
        }
     }

或者有更好的方法可以做到这一点。我只想学习 C# 并以正确的方式进行练习。此外,如果您知道完成这 100 个练习的更好工作流程,那就太好了,我将不胜感激!

C# 中方法的菜单

您可以创建一个字典,将练习编号作为键,将操作作为值:

class Program
{
    static Dictionary<int, Action> exercises = new Dictionary<int, Action>
    {
        // put the numbers with the exercise method here:
        {1, () => Exercise1()},
        {2, () => Exercise2()},
    };
    public static void Main(String[] args)
    {
        int opt;
        Console.WriteLine("program name");
        Console.WriteLine();
        // Print valid names - Alternatively get them from a list
        foreach (int i in exercises.Keys)
        {
            Console.WriteLine(string.Format("{0}. Exercise {0}", i));
        }
        Console.WriteLine();
        Console.WriteLine("Choose exercise number: ");
        opt = int.Parse(Console.ReadLine());
        // call like this:
        exercises[opt]();
    }
 }

这里的优点是它支持任何方法名称,并且不需要反射。

您可以使用反射。喜欢这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(String[] args)
        {
            int opt;
            Console.WriteLine("program name");
            Console.WriteLine();
            for (int i = 1; i <= 100; i++)
            {
                Console.WriteLine(i + ". exercise " + i);
                // or use:
                // Console.WriteLine("{0}. exercise {0}", i); 
            }
            Console.WriteLine();
            Console.WriteLine("Choose exercise number: ");
            opt = int.Parse(Console.ReadLine());
            MethodInfo info = (typeof(Program)).GetMethod("Exercise" + opt.ToString());
            //then call the exercise#
            info.Invoke(null, null);
            Console.ReadLine();
        }
        public static void Exercise1()
        {
            Console.WriteLine("Exercise 1 executing..");
        }
        public static void Exercise2()
        {
            Console.WriteLine("Exercise 2 executing..");
        }
    }
}

你必须编写自己的练习3,...,练习100。

基本上,您希望根据用户选择动态调用方法。那我必须用反思。

如果你正在学习C#,我认为这是一个高级主题。无论如何检查这个:http://www.dotnetperls.com/getmethod

希望这有帮助。

干杯

您可以使用

for 循环来不断增加数字;

 static void Main(string[] args)
        {

            Console.WriteLine("program name");
            Console.WriteLine();
            for (int i = 1; i <= 100; i++)
            {
                Console.WriteLine(i + ". exercise " + i);
            }
        }

循环意味着整数 i 的循环,直到它小于或等于 100 并每次递增 1 (i++)