Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,在visualstudio中,使用控制台应用程序,是否有方法在类中生成方法并使用readline在主程序中调用它们?_C#_Visual Studio - Fatal编程技术网

在C#中,在visualstudio中,使用控制台应用程序,是否有方法在类中生成方法并使用readline在主程序中调用它们?

在C#中,在visualstudio中,使用控制台应用程序,是否有方法在类中生成方法并使用readline在主程序中调用它们?,c#,visual-studio,C#,Visual Studio,在C#中,在visualstudio中,使用控制台应用程序,是否有方法在类中生成方法并使用readline在主程序中调用它们 Aka,一种在程序运行时选择打开哪些方法的方法 这在使用反射时是非常可能的。以下是帮助您解决问题的示例代码: class Program { public static void Hello1() { Console.WriteLine("\nHello 1"); } public static void Hello2(

在C#中,在visualstudio中,使用控制台应用程序,是否有方法在类中生成方法并使用readline在主程序中调用它们


Aka,一种在程序运行时选择打开哪些方法的方法

这在使用反射时是非常可能的。以下是帮助您解决问题的示例代码:

class Program
{

    public static void Hello1()
    {
        Console.WriteLine("\nHello 1");
    }

    public static void Hello2()
    {
        Console.WriteLine("\nHello 2");
    }
    static void Main(string[] args)
    {
        while (true)
        {
            String method = Console.ReadLine();

            Type methodType = typeof(Program);
            MethodInfo voidMethodInfo = methodType.GetMethod(method);
            voidMethodInfo.Invoke(method,null);
        }
    }
}

有关更多信息,您可以访问。

最简单的方法是switch语句,因为这些选项很多。你的目标是完整的.net框架还是.net核心。不确定。这是一个控制台应用程序。因此,它只适用于小型学校的分配方法。尽可能地,我不推荐这种做法,因为它强制执行不自然的编码习惯。最好只使用
switch()
树或一些
if
s,因为它还提供了更多的控制。
class Program
{
    private static IDictionary<string, Action> MethodMappings = new Dictionary<string, Action> {
       {"Method1", Method1},
       {"Method2", Method2},
       ...
    }

    public static void Main(string[] args) {

       var methodCall = Console.ReadLine();

       if (!MethodMappings.ContainsKey(methodCall)) {
          //unrecognized command
       }

       MethodMappings[methodCall].Invoke();
    }

    private static void Method1() { ... }
    private static void Method2() { ... }
}