string total="";//存储生成的编号
for(int i=0;i<newTable.Rows.Count;i++)
{
string name=newTable.Rows[i][2].ToString().Trim();//函数名
string opl=newTable.Rows[i][3].ToString().Trim();//所传递的参数
if(name!="")
{
myarr.Add(newTable.Rows[i][2].ToString().Trim());
object obj = Activator.CreateInstance(typeof(getbh), true);
getbh he = obj as getbh;
MethodInfo method = he.GetType().GetMethod(name);
if(newTable.Rows[i][3].ToString().Trim()=="")//没有参数
{
string t = (string)method.Invoke(he,null);
total+=t;
}
else
{
object[] par=new object[]{opl};
string t1 = (string)method.Invoke(he,par);//运行到这句报错:
未将对象引用设置到对象的实例。
total+=t1;
}
}
}why?
for(int i=0;i<newTable.Rows.Count;i++)
{
string name=newTable.Rows[i][2].ToString().Trim();//函数名
string opl=newTable.Rows[i][3].ToString().Trim();//所传递的参数
if(name!="")
{
myarr.Add(newTable.Rows[i][2].ToString().Trim());
object obj = Activator.CreateInstance(typeof(getbh), true);
getbh he = obj as getbh;
MethodInfo method = he.GetType().GetMethod(name);
if(newTable.Rows[i][3].ToString().Trim()=="")//没有参数
{
string t = (string)method.Invoke(he,null);
total+=t;
}
else
{
object[] par=new object[]{opl};
string t1 = (string)method.Invoke(he,par);//运行到这句报错:
未将对象引用设置到对象的实例。
total+=t1;
}
}
}why?
我感觉是这个getbh he = obj as getbh;
he 复制了obj吧
一旦运行传参数的函数就报错string t1 = (string)method.Invoke(he,par);//运行到这句报错:
如果运行到这里
先判断下he是否为空,因为使用as的关系,可能在转换失败时he为null。在判断name是否为空或者为""。
最后判断下method 是否为null。。因为这个类里面不一定包含name方法。
当然还要判断下opl是否为空,并查看具体调用的方法是否可以接受null类型的参数。
如果4者有1为null,都会可能会出现这个问题。
但是调用有参数的方法的时候method对象为null
比如name=_pnum(在dll文件中定义public static string _pnum(string lx))
dll文件的问题
谢谢各位的热心帮助