本帖最后由 whizen 于 2011-03-23 16:04:07 编辑

解决方案 »

  1.   

    调试时候能得到local=false,但是不知道怎么判断。用if(local==fase)编译发生错误。
    请各位兄弟告诉下判断方法。
      

  2.   

    local = inputProcess();
    local = logicProcess();
    local = mainProcess();最后会覆盖第一个吧?你的3个方法返回3个boolpublic bool CheckMethod() 
      {
      if (String.IsNullOrEmpty(this.TextBox1.Text.Trim()))
      return false;
      else
      return true;
      }  public bool CheckLogicMethod()
      {
      if (this.TextBox1.Text.Trim().Length <=5)
      return false;
      else
      return true;
      }
      public bool DataBindMethod()
      {
      this.TextBox1.Text = "数据处理OK,已经被插入到数据库中。";
      return true;
      }
      }搞不懂 既然都有MainMethod()那就直接
    local = mainProcess();得了呗
      

  3.   

    对local 进行类型判断 对 false 和 0 进行 停止动作 
      

  4.   

    强制转换呗调用直接写方法就行了,默认会给你创建个匿名代理
    var result = Process<bool>(Check1, Check1, Check1);static bool Check1()
    {
        return false;
    }public static TResult Process<TResult>(Func<TResult> inputProcess,
                                           Func<TResult> logicProcess,
                                           Func<TResult> mainProcess)
    {
        TResult local;
        local = inputProcess();
        if (local is bool)
        {
            var success = Convert.ToBoolean(local);
            if (!success)
                return default(TResult);
        }
        local = logicProcess();
        local = mainProcess();
        return local;
    }
      

  5.   

    改写下:public static TResult Process<TResult>(params Func<TResult>[] processes)
    {
        TResult local = default(TResult);
        foreach (var func in processes)
        {
            local = func();
            if (local is bool)
            {
                var success = Convert.ToBoolean(local);
                if (!success)
                    return local;
            }
        }
        return local;
    }
      

  6.   

      public static boo Process<bool>( Func<bool> inputProcess,
      Func<bool> logicProcess,
      Func<bool> mainProcess) 为什么要用TResult,直接用bool不就好了。 
      

  7.   


    public static TResult Process<TResult>(params Func<TResult>[] processes)
    {
        TResult local = default(TResult);
        foreach (var func in processes)
        {
            local = func();
            if (local is bool)
            {
                var success = Convert.ToBoolean(local);
                if (!success)
                    return local;
            }
        }
        return local;
    }
    fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。
    请给一下例子,马上结贴给分。马上结贴给分。
    fangxinggood:太谢谢你了。
      

  8.   


    如果类型确定,可以直接用Func<bool>,否则就按非哥说的先转换TResult为bool
    然后可以直接进行逻辑运算
    try
    {
        local = inputProcess() && logicProcess() && mainProcess();
    }
      catch (Exception ex)
    {
       local = false;
    }
      

  9.   

    用Func<bool>的话就固定了类型,如果我有其他的方法比如:Func<string>就不适用了。用TResult是最好的扩展选择比如:
    1,string method1,string method2,string method3
    2,bool method1,bool method2,bool method3
    以上两组都可以兼容的。fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。
    请给一下例子,马上结贴给分。马上结贴给分。
    fangxinggood:太谢谢你了。
      

  10.   

    static void Main()
    {
        var ret = Process(CheckInput1, CheckInput2, CheckInput3);
        Console.WriteLine("Return {0}", ret);
        Console.Read();
    }public static bool CheckInput1()
    {
        Console.WriteLine("CheckInput1...");
        return true;
    }
    public static bool CheckInput2()
    {
        Console.WriteLine("CheckInput2...");
        return true;
    }
    public static bool CheckInput3()
    {
        Console.WriteLine("CheckInput3...");
        return true;
    }public static TResult Process<TResult>(params Func<TResult>[] processes)
    {
        TResult local = default(TResult);
        foreach (var func in processes)
        {
            local = func();
            if (local is bool)
            {
                var success = Convert.ToBoolean(local);
                if (!success)
                    return local;
            }
        }
        return local;
    }你也可以这么写: bool result = Process<bool>(CheckInput1, CheckInput2);
    因为是参数数组。
    输出:
    CheckInput1...
    CheckInput2...
    CheckInput3...
    Return True
    ----------------
    如果修改 CheckInput2 的返回值为:false,则输出:
    CheckInput1...
    CheckInput2...
    Return False
      

  11.   

    非常感谢:fangxinggood
    谢谢:dongxinxi