如何将变量值作为方法名使用?这个方法名是存在的方法

问题描述

voidgo(stringi){stringming="haha";ming=ming+i;ming();//这个方法是存在的}

如何才能将变量值作为方法名使用啊?

解决方案

解决方案二:
查下反射varmethod=type.GetMethod(methodName);if(method!=null){method.Invoke(this);}

解决方案三:
通过反射,找到符合名字的method,然后invoke
解决方案四:
出现这种情况就是你命名不规范了。函数一般是一个动作,用一个动词开头的单词,例如:GetData、SetData而变量一般是一个名词,例如:data而且还有大小写的习惯,怎么也不会出现你说的冲突。
解决方案五:
反射privatevoidDoFunction(stringFunctionName){object[]Obj=newobject[]{};MethodInfovMethodInfo=GetType().GetMethod(FunctionName);if(vMethodInfo==null){return;}vMethodInfo.Invoke(this,Obj);}

解决方案六:
注意想反射调用的函数必须设置成public
解决方案七:
用委托呀。。。。
解决方案八:
引用1楼starfd的回复:

查下反射varmethod=type.GetMethod(methodName);if(method!=null){method.Invoke(this);}

for(inti=1;i<100;i++){type.GetMethod("go"+i.ToString())().invoke(this);}

这样会不会就运行go1()go2()……go100()啊?
解决方案九:
你有这么多方法的话,会执行,如果不是的话,会产生异常,当然那个this你得改为对应的实体对象
解决方案十:
已经判断method!=null了所以不会执行出错如果没有,它会是null的
解决方案十一:
引用8楼starfd的回复:

你有这么多方法的话,会执行,如果不是的话,会产生异常,当然那个this你得改为对应的实体对象

搞不定啊,我在Main中使用for(inti=1;i<3;i++){type.GetMethod("go"+i.ToString())().invoke(this);}提示错误,提示type的名空间不存在publicvoidgo1(){login1();sendinfo1();//goN中还调用了两个loginN和sendinfoN函数}
解决方案十二:
for(inti=1;i<3;i++){Typetype=typeof(Program);type.GetMethod("go1").invoke(this);}这样以后还是出错,提示errorCS1061:Type`System.Reflection.MethodInfo'doesnotcontainadefinitionfor`invoke'andnoextensionmethod`invoke'oftype`System.Reflection.MethodInfo'couldbefound.Areyoumissinganassemblyreference?
解决方案十三:
usingSystem.IO;usingSystem;usingSystem.Reflection;classProgram{staticvoidMain(){for(inti=1;i<3;i++){Typetype=typeof(Program);type.GetMethod("go"+i).invoke(this);}}publicvoidgo1(){Console.WriteLine("Hello,World111");}publicvoidgo2(){Console.WriteLine("Hello,World222");}publicvoidgo3(){Console.WriteLine("Hello,World333");}}

解决方案十四:
是Invoke不是invoke你连错误都看不懂吗?
解决方案十五:
type.GetMethod("go1").invoke(this,newobject[])没有一个参数的重载即使被调用的参数没有参数,你也得传个空数组进去
解决方案:
还有大小写也要区分清楚
解决方案:
引用13楼shingoscar的回复:

是Invoke不是invoke你连错误都看不懂吗?

这样还是不对啊usingSystem.IO;usingSystem;usingSystem.Reflection;classProgram{publicvoidha(){for(inti=1;i<3;i++){Typetype=typeof(Program);type.GetMethod("go"+i).Invoke(this,newobject[1]);}}staticvoidMain(){Programp=newProgram();p.ha();}publicvoidgo1(){Console.WriteLine("Hello,World111");}publicvoidgo2(){Console.WriteLine("Hello,World222");}publicvoidgo3(){Console.WriteLine("Hello,World333");}}

解决方案:
this.GetType().GetMethod("g1").Invoke(this,null);
解决方案:
newobject[1]是啥鬼new个数组也不会new了吗
解决方案:
newobject[1]改为null
解决方案:
不行你先定义个数组object[]obj;然后传递进去别在里面new了
解决方案:
newobject[1]表示有一个元素相当于你要给函数传递一个变量,然后这个变量是null
解决方案:
引用19楼WM_JAWIN的回复:

newobject[1]改为null

usingSystem.IO;usingSystem;usingSystem.Reflection;classProgram{publicvoidha(){for(inti=1;i<3;i++){Typetype=typeof(Program);type.GetMethod("go"+i.ToString()).Invoke(this,null);}}staticvoidMain(){Programp=newProgram();p.ha();}publicvoidgo1(){login1();sendinfo1();}publicvoidgo2(){login2();sendinfo2();}....publicvoidgoN(){loginN();sendinfoN();}}

这样搞定了,但是go1go2goN太多重复了,怎么样才能用for循环定义100个go1()到go100()
解决方案:
引用22楼rbbcnm的回复:

这样搞定了,但是go1go2goN太多重复了,怎么样才能用for循环定义100个go1()到go100()

就算你实现了自动生成10000个方法,又有什么意义呢如果方法里的代码都一样,那就根本用不到那么多如果不一样,生成了有啥用,还不是得挨个改里面的代码
解决方案:
如果只是想实现定义100个函数,而里面先不写方法最简单的办法可以先写excel表格里然后鼠标一拖拽就自动增长,名字就都不相同了
解决方案:
初步判定设计思路有问题
解决方案:
引用25楼WM_JAWIN的回复:

初步判定设计思路有问题

没错,因为调用很多个dll里的函数,所以只能这么做如何用for语句创建100个下面的函数啊?publicvoidgo1(){login1();sendinfo1();}publicvoidgo2(){login2();sendinfo2();}....publicvoidgoN(){loginN();sendinfoN();}
解决方案:
和调用goN方式,直接调用LoginN和sendinfoN
解决方案:
通过方法名动态调用方法,是合理的需求但用for循环定义100个方法就完全不合理了!循环产生的是结果相同的代码,最多只是参数不同。那么就只需写一个方法就解决问题了如果生成的代码是按预先保存的规则(格式)进行的,那么写这些规则和直接写代码优势在哪里呢?C#已经提供了动态生成Lamda表达式和动态编译C#代码的手段,你可以尝试用一下
解决方案:
引用28楼xuzuning的回复:

通过方法名动态调用方法,是合理的需求但用for循环定义100个方法就完全不合理了!循环产生的是结果相同的代码,最多只是参数不同。那么就只需写一个方法就解决问题了如果生成的代码是按预先保存的规则(格式)进行的,那么写这些规则和直接写代码优势在哪里呢?C#已经提供了动态生成Lamda表达式和动态编译C#代码的手段,你可以尝试用一下

技多不压身啊,即使现在的问题确实用不到批量建函数,但是万一以后用到呢?能不能用for循环批量建函数啊?

时间: 2024-10-24 18:14:46

如何将变量值作为方法名使用?这个方法名是存在的方法的相关文章

flash as3获取php的变量值实现方法

HP代码 (test1.php): 不推荐写成这种含html代码的形式:  代码如下 复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

用简单的方法使控件显示变量值的变化

问题描述 大家好,我是C#的初学者,我之前一直搞的是C++.我有个问题想问一下大家.有一个变量,这个变量的值会发生变化,但是什么时候变化,多久变一次,不知道.在界面上,我想用Lable或者Text控件来显示这个变量的值.要是C++做,用update(ture)控件的值就会随其变化.但是在C#中,我不知道怎么做.我看到有的人,用的是定时器Timer,我觉得太麻烦了吧,这样太消耗资源,因为你要不停地刷新,即使变量的值没有改变,C++绝对没有人会这么做.还有的人用循环,这些都和我认识的编程习惯不符.这

c# net-C# (急急急)执行一个方法的时候变量值为什么会改变呢?

问题描述 C# (急急急)执行一个方法的时候变量值为什么会改变呢? namespace Test { public partial class Form2 : Form { M_Model TModel = new M_Model(); public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { TModel.Num = 5; DoWork DW = new

PHP互换两个变量值的方法(不用第三变量)_php技巧

前言 今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的.详细的解说见代码注释,下面来一起看看吧. 一.substr() && strlen() 代码: <?php /** * 双方变量为字符串时,可用交换方法一 * 使用substr()结合strlen()两个方法达到交换变量值得目的 */ $a = "This is A"; // a变量原始值 $b = "This is B"; // b变量原始值 ec

ORACLE获取SQL绑定变量值的方法总结

  本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅.     方法1:查询V$SQL   V$SQL视图中的BIND_DATA字段用来存储绑定变量的值,但是从这个视图查询绑定变量的值,有很大的局限性:       1: 它的记录频率受_cursor_bind_capture_interval隐含参数控制,默认值为900,表示每900秒记录一次绑定值,也就是说在900内,绑定变量值的改变不会反

php用ini_get获取php.ini里变量值的方法_php技巧

本文实例讲述了php用ini_get获取php.ini里变量值的方法.分享给大家供大家参考.具体分析如下: 要得到php.ini里的变量值,当然,你可以用phpinfo();来得到所有php配置信息,但如果要想得到某个变量值的话,你又要怎样获取呢? php里提供一个获取php.ini里的变量值的函数:ini_get() ini_get()的用法非常简单,下面通过实例说明它是如何使用的. 语法: string ini_get ( string varname ) 返回值如果为布尔型则为0或1 实例

一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法

这篇外传之前有这么几篇文章: <一个执行计划异常变更的案例 - 前传> <一个执行计划异常变更的案例 - 外传之绑定变量窥探> 上一篇文章介绍了绑定变量以及11g之前绑定变量窥探的影响,这篇文章会介绍几种查看绑定变量值的方法. 上篇文章我们说了,绑定变量实际是一些占位符,可以让仅查询条件不同的SQL语句可以重用解析树和执行计划,避免硬解析.绑定变量窥探则是第一次执行SQL硬解析时,会窥探使用的绑定变量值,根据该值的分布特征,选择更合适的执行计划,副作用就是如果绑定变量列值分布不均匀

进程控制-进程都有自己独立的栈,那为什么gdb等调试工具可以修改其他进程栈里的变量值

问题描述 进程都有自己独立的栈,那为什么gdb等调试工具可以修改其他进程栈里的变量值 如题 进程都有自己独立的栈,那为什么gdb等调试工具可以修改其他进程栈里的变量值 解决方案 可以跨进程访问内存,也可以通过注入线程的方法给进程添加代码对于windows来说,前者用ReadMemoryProcess,后者用CreateRemoteThread

matlab-为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值

问题描述 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 解决方案 看看是不是有别的地方又赋值了,或者变量名搞错了. 解决方案二: 调试过程中可以很明显的看到,赋值符号右边是对的,但是就是不能输出到左边变量 解决方案三: 该变量是不是全局变量呢