Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# 基于变量值调用方法_C#_Variables_Methods - Fatal编程技术网

C# 基于变量值调用方法

C# 基于变量值调用方法,c#,variables,methods,C#,Variables,Methods,我有1000个方法,叫做method0001,method0002,方法1000。 我有一个变量,取值在1到1000之间 如果变量的值是x,我想调用methodx。例如,如果变量的值是34,我想调用method0034。请问我如何用C#编码 很多人都在问Methodwxyz需要什么。每种方法都是不同类型的数学问题 我已经这样做了,遵循有用的评论,但我得到了错误(编辑了前面的问题) 谢谢你可以通过反思来做到这一点。编辑快速示例(忽略调用参数)。关于反思的一些提示: 如果您得到一个nullexce

我有1000个方法,叫做method0001,method0002,方法1000。 我有一个变量,取值在1到1000之间

如果变量的值是x,我想调用methodx。例如,如果变量的值是34,我想调用method0034。请问我如何用C#编码


很多人都在问Methodwxyz需要什么。每种方法都是不同类型的数学问题

我已经这样做了,遵循有用的评论,但我得到了错误(编辑了前面的问题)


谢谢

你可以通过反思来做到这一点。编辑快速示例(忽略调用参数)。关于反思的一些提示:

  • 如果您得到一个nullexception,这意味着它找不到该方法
  • 您正在调用的方法必须是公共的
  • 如果使用模糊处理,则该方法的名称可能不同
代码


使用switch语句或具有委托类型的字典。然而,这似乎有点可疑,我要问的第一个问题是,为什么有1000个名为methodNYeah的方法看起来应用程序的设计需要很多重构。我认为考虑到这种情况,最好是进行反思。如果您有1000种方法,称为Method0001、MethodXXXX、Method1000,那么您对任何问题的解决方案都可能是错误的。我想有一个更好的方法来实现你想做的事情。在没有看到您的代码或不知道这些方法的作用的情况下,很难给出建议。许多人都在问Methodwxyz需要什么。每种方法都是一种不同类型的数学问题,需要不同类型的随机变量来生成这些问题,正如人们所提到的,你确实有两种选择,一个大的开关语句(我会使用Excel之类的东西来编写代码,然后将其复制/粘贴到VS中)或反射。反射速度会慢一些。但是,如果您创建一个
字典
,它会更快。int将是您的方法编号,MethodInfo将引用您要调用的方法。在启动时反思所有方法,构建字典。然后,在运行时,使用字典选择正确的MethodInfo来调用,但是我得到了错误:“NullReferenceException:对象引用未设置为对象的实例”您能建议吗?TY这意味着您要查找的方法不存在。我将发布额外的代码,显示您是如何尝试从哪一点调用该方法的。更有可能的是,您正在错误的位置搜索方法。在问题中添加了代码。
  using System.Collections.Generic;
 using UnityEngine;
  public class TextControl : MonoBehaviour
{
public static TextControl instance;

void Start()
{
   instance = this;
}
// Update is called once per frame
void Update()
{


        this.GetType().GetMethod("Template00" + "1").Invoke(this, null);





}
public static string Templates001()
{
    // doing something here
} 
 }  
public class Program
{
    public static void Main(string[] args)
    {
        Check method1 = new Check(1);
        Check method2 = new Check(2);
    }
}

public class Check
{
    public Check(int x)
    {
        this.GetType().GetMethod("Method" + x).Invoke(this, null); 
    }

    public void Method1()
    {
        Console.WriteLine("Method 1");
    }

    public void Method2()
    {
        Console.WriteLine("Method 2");
    }
}