如何使用三元运算符调用具有动作的函数?

时间:2015-10-06 01:06:10

标签: c# lambda ternary

我定义了函数

public void HogeFunc(Action<Bar> act)
{
    this.act = act;
}

如果我打电话给HogeFunc,它就可以了。

if(isFuga)
{
    hogeClass.HogeFunc(null);
}
else
{
    hogeClass.HogeFunc(this.MyFunc);
}

但是,我想通过使用三元运算符来调用HogeFunc。

所以,我写的如下

try1

hogeClass.HogeFunc(isFuga ? null : this.MyFunc);

try2

hogeClass.HogeFunc((i)=>{return isFuga ? null : this.MyFunc;});

但是,没有工作......

你能告诉我怎么做吗?

3 个答案:

答案 0 :(得分:1)

为了在C#中使用三元运算符,两个结果必须返回相同的对象类型。

尝试将null投射到相同的返回类型this.MyFunc

答案 1 :(得分:1)

你的第一次尝试对我来说是正确的,但你也可以这样称呼:

isFuga ? hogeClass.HogeFunc(null) : hogeClass.HogeFunc(this.MyFunc);

答案 2 :(得分:0)

这很简单,你只是混合了三元操作的部分,你需要输入类型。

以下代码:

if(isFuga)
{
    hogeClass.HogeFunc(null);
}
else
{
    hogeClass.HogeFunc(this.MyFunc);
}

可以在这里改写:

hogeClass.HogeFunc(isFuge ? (Action<Bar>)null : (Action<Bar>)this.MyFunc);

或在这里:

hogeClass.HogeFunc(isFuge ? (Action<Bar>)null : (Action<Bar>)(x_bar => 
{
   this.MyFunc(x_bar);
}));