2015-10-06 29 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); 
}));