gpt4 book ai didi

c# - 将 bool 表达式作为方法参数传递

转载 作者:行者123 更新时间:2023-11-30 23:31:48 26 4
gpt4 key购买 nike

尝试使用 lambda 实现更优雅的通用解决方案时,我有点困惑/LINQ ExpressionFunc<bool>简单地替换一个 bool返回类型。

假设表达式是:

public bool someBoolRetMethod(someType parA, someOtherType parB) {
if(parA==null)
return new ExpM("relevant msg").Rtrn;
}

所以现在如果parAnull , 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) ....

什么是正确的实现方式?

更新:

 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; }
}

用法:

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...
}

最佳答案

如果你想创建Func<bool>作为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> !")
// ^^^^^

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

关于c# - 将 bool 表达式作为方法参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com