C# 将布尔表达式作为方法参数传递

C# 将布尔表达式作为方法参数传递,c#,linq,lambda,expression,func,C#,Linq,Lambda,Expression,Func,尝试使用lambda/LINQExpression或Func简单地替换bool返回类型来实现更优雅的通用解决方案时,我有点困惑 假设表达式是: public bool someBoolRetMethod(someType parA, someOtherType parB) { if(parA==null) return new ExpM("relevant msg").Rtrn; } 所以现在如果parA是null,ExpM()是一个处理错误的类 我想做的是将条件作为

尝试使用
lambda
/
LINQ
Expression
Func
简单地替换
bool
返回类型来实现更优雅的通用解决方案时,我有点困惑

假设表达式是:

public bool someBoolRetMethod(someType parA, someOtherType parB) {
    if(parA==null)
        return new ExpM("relevant msg").Rtrn;
} 
所以现在如果
parA
null
ExpM()
是一个处理错误的类

我想做的是将条件作为参数传递:

public class ExpBoolCond:ExpM {

    public bool Rtrn{get;set;}
    public ExpBoolCond(theBool, themsg) {
        variable to hold theBool;
        if(theBool) new specialMbxWindow(themsg)
        then set Rtrn..
    }
}
这样我就可以使用:

 var condNullParA = new ExpBoolCond(parA==null, "passed ParA is Null,\r\nAborting method <sub>(methodName and line# is handled inside  ExpM base class)</sub> !")
if(condNullParA.Rtrn) ....
var condNullParA=new ExpBoolCond(parA==null,“传递的parA为null,\r\n终止方法(methodName和line#在ExpM基类内处理)!”)
如果(第Rtrn段)。。。。
正确的实施方法是什么

更新:

 public class ExcBCondM:ExcpM
 {
     public bool Rtrn { get { return this._Rtrn(); } }
     Func<bool> _Rtrn { get; set; }
     public ExcBCondM(Func<bool> cond, string bsMsg)
        : base(bsMsg,false)
     {
        this._Rtrn = cond;
        //if (this._Rtrn) this.show();
     }
     public bool activateNon() { this.show(); return false; }
 }
公共类ExcBCondM:ExcpM
{
public bool Rtrn{get{返回这个。_Rtrn();}
Func_Rtrn{get;set;}
public ExcBCondM(funct-cond,字符串bsMsg)
:base(bsMsg,false)
{
这个。_Rtrn=cond;
//如果(this.Rtrn)this.show();
}
public bool activateNon(){this.show();返回false;}
}
用法:

public bool someBoolRetMethod(some_passed_Type parA)
{
    var someCondExpM =  new ExpBoolCond(() => parA==null, "relevant Message");
    if(someCondExpM.Rtrn) 
    return someCondExpM.activateNon(); //if() now Calls Func<bool> _Rtrn  when called rather where stated.
  return true;//if ok...
}
public bool someBoolRetMethod(some_passed_Type parA)
{
var someCondExpM=new ExpBoolCond(()=>parA==null,“相关消息”);
if(someCondExpM.Rtrn)
返回someCondExpM.activateNon();//if()现在在调用时调用Func _Rtrn,而不是在指定的位置。
返回true;//如果确定。。。
}

如果要将
Func
创建为lambda表达式,语法如下:

var condNullParA = new ExpBoolCond(() => parA==null, "passed ParA is Null,\r\nAborting method <sub>(methodName and line# is handled inside  ExpM base class)</sub> !")
//                                 ^^^^^
var condNullParA=new ExpBoolCond(()=>parA==null,“传递的参数为null,\r\n终止方法(methodName和line#在ExpM基类内处理)!”)
//                                 ^^^^^

()=>
部分告诉C#编译器,后面的表达式应该成为不带参数的lambda体,并返回
=>
符号右侧的表达式类型,即
bool

您首先要做的事情非常不清楚。您已有的简单代码有什么问题?(如果你能用一个完整的具体例子和习惯用法的名字也会有帮助……)你的问题很混乱,请重读并重写。目前它没有多大意义。@JonSkeet我只想将“简单的”
parA==null
条件作为参数传递,不知道如何传递。为什么我不太清楚它是否有效,但我是通过这种方式学习lambda/LINQ的……但是为什么需要lambda表达式呢?为什么不直接将参数设置为
bool
?你真的,真的需要知道你为什么要做一些事情——你想实现什么。你不应该仅仅为了使用lambda表达式和LINQ。@Robb_2015:嗯,这是Jbob Johan在另一条评论中写的,然后被删除。您是否有可能是两个帐户上的一个用户?(我的回答是:你的问题目前没有任何这方面的内容。)这样,只有在我调用
condNullParA.Rtrn
时才会计算parA=null,而不是在现场…?你为什么要懒洋洋地(即不立即)计算这样一个简单的条件?@JbobJohan只有在计算
theBool
时才会计算条件,这需要调用,即
if(theBool())
(注意括号对)。因此
Func
是表示if()的“parA==null”状态的类型参数?=><代码>公共ExpBoolCond(Func theBool,string themsg)非常感谢。这是正确的答案,唯一的问题是
()=>
有点烦人,但我想在其他方面,我们需要声明一个var Func bool,它更符合语法