我创建了一个具有add,sub,mul功能的类人员 和mytest我通过我的代表参考
并且在static void main中我想要
DateTime.Now.Hour<12
it should call add
if DateTime.Now.Hour<20 it should call sub
。
但我收到错误
'ad1'在当前上下文中不存在
class person
{
public void add(int x,int y)
{
Console.WriteLine(x+y);
}
public void sub(int x,int y)
{
Console.WriteLine(x-y);
}
public void mul(int x,int y)
{
Console.WriteLine(x*y);
}
public void test(mydel ad1)
{
ad1(2, 3);
}
}
class Program
{
static void Main(string[] args)
{
person p = new person();
if(DateTime.Now.Hour<12)
{
mydel ad1 = p.add;
}
else if(DateTime.Now.Hour<20)
{
mydel ad1 = p.sub;
}
p.test(ad1);
}
}
答案 0 :(得分:0)
ad1
在if
方法的Main
块内声明,并且不在if
范围之外。
我认为你根本不需要这个变量只需从if
:
static void Main(string[] args)
{
person p = new person();
if(DateTime.Now.Hour<12)
{
p.test(p.add);
}
else if(DateTime.Now.Hour<20)
{
p.test(p.sub);
}
}
这也将确保Hour
&gt; 20将不会调用任何内容,您将不会获得null异常。
但是,如果您选择使用此变量,请在if
之前定义(并使用null
进行分配),并在使用之前确保它不是null
。
答案 1 :(得分:0)
class person
{
public void add(int x, int y) => Console.WriteLine(x + y);
public void sub(int x, int y) => Console.WriteLine(x - y);
public void mul(int x, int y) => Console.WriteLine(x * y);
public void test(Action<int, int> ad1) => ad1(2, 3);
}
class Program
{
static void Main(string[] args)
{
person p = new person();
Action<int, int> action = (x, y) => {};
if (DateTime.Now.Hour < 12)
{
action = p.add;
}
else if (DateTime.Now.Hour < 20)
{
action = p.sub;
}
p.test(action);
}
}