【发布时间】:2015-12-26 18:44:04
【问题描述】:
尝试使用 lambda/LINQ Expression 或 Func<bool> 来简单地替换 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) ....
实现它的正确方法是什么?
更新:
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...
}
【问题讨论】:
-
一开始你还不清楚你到底想做什么。你已经得到的简单代码有什么问题? (如果您使用具有惯用名称的完整具体示例也会有所帮助......)
-
你的问题比较乱,请重读再重写。目前它没有多大意义。
-
@JonSkeet 我只想将“简单”
parA==null条件作为参数传递,但不知道如何。如果它是有效的,为什么我不太清楚,但我以这种方式学习 lambda / LINQ ... -
为什么你还需要一个 lambda 表达式呢?为什么不直接制作
bool类型的参数呢?而你真的,真的需要知道为什么你想要做某事——你想要达到的目标。您不应该仅仅为了它而尝试使用 lambda 表达式和 LINQ。 -
@Robb_2015:嗯,这就是 Jbob Johan 刚刚在另一条评论中写的,然后被删除了。您是否有机会使用两个帐户的一个用户? (我的回答是:你的问题目前没有任何内容。)
标签: c# linq lambda expression func