委托给出错误名称'ad1'在当前上下文中不存在

时间:2017-04-22 05:13:40

标签: c# delegates

  

我创建了一个具有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);      
     }
 }

2 个答案:

答案 0 :(得分:0)

ad1if方法的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);
        }
    }