2015-10-06 91 views
0

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

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

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

莫非你告诉我h流向?

+0

请提供确切的错误。看起来像许多重复之一如何使用“与行动三元”(即http://stackoverflow.com/questions/2765360/ternary-operators-in-c-sharp),但可能不是。 –

+1

'HogeFunc'采取'动作'并且动作不会返回值,但您似乎试图用来返回值。 – Enigmativity

回答

1

三元运算符需要从两个选项中返回相同的类型。

1

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

尝试铸造nullthis.MyFunc

+0

返回类型为void – shinriyo

1

你的第一次尝试相同的返回类型看起来正确的给我,但你也可以调用诸如:

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

谢谢回复 但是,我不想写两次“hogeClass.HogeFunc”。 – shinriyo

+0

@shinriyo:但它工作与否?因为你的第一次尝试是正确的,它应该工作。 – displayName

0

这是非常简单的,你只是混合部件三元操作,你需要类型转换。

以下代码:

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

可以rwritten如下:

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

或在这里:

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