代码之家  ›  专栏  ›  技术社区  ›  Leon Marzahn

C.NET将action作为方法的参数,该方法提供一个可以从lambda实例化此操作来执行的函数

  •  0
  • Leon Marzahn  · 技术社区  · 7 年前

    为了简化我刚才写的内容,基本上意味着我想要这样的东西:

    var someClass = new someClass((func1, func2) =>
    {
      if (cool)
      {
        func1(cool);
      }
      else
      {
        func2(cool);
      }
    }
    

    这有可能吗?我试了一个动作,但没用。我真的很感谢你的帮助。

    3 回复  |  直到 7 年前
        1
  •  1
  •   FractalCode    7 年前

    好吧,我希望这就是你想要的:

      public class SomeClass
    {
        public SomeClass(Action<Action<bool>, Action<bool>> func)
        {
        func(
                (i) =>{
                    Func1(i);
                },
    
                (j) =>
                {
                    Func2(j);
                });
    
    
        }
    
        public void Func1(bool cool)
        {
    
        }
    
        public void Func2(bool cool)
        {
    
        }
    
        public static void Main()
        {
            var someClass = new SomeClass((func1, func2) =>
              {
                  var cool = true;
                  if (cool)
                  {
                      func1(cool);
                  }
                  else
                  {
                      func2(cool);
                  }
              });
        }
    }
    
        2
  •  0
  •   Paul Swetz    7 年前
     var f = new Func<int>(() => { return 1; });
     var result = f.Invoke();
    

    这就是你想要的吗?

    输入和输出的语法是

    var myfunction=new func((x,y,z)=>返回a;);

    var a=x.调用(x,y,z);

    从编辑注释

     public class someclass
     {
          private Func A = ......
          private Func B = ......
          public void somemethod(type x)
          {
               if(x) this.A.Invoke();
               else this.B.Invoke();  
          }
     }
    
        3
  •  0
  •   Boric    7 年前

    您可以创建一个方法,该方法获取操作参数,并根据某些条件返回其中一个参数,这样就可以在调用站点上执行返回操作。

    Action method (Action a, Action b)
    {
        if (cool)
        {
            return a;
        }
        else
        {
            return b;
        }
    }