2012-04-24 44 views
13

有什麼辦法可以在C#中做類似的事情嗎?類似Ruby的'除非'用於C#嗎?

即。

i++ unless i > 5; 

這裏是另一個例子

weatherText = "Weather is good!" unless isWeatherBad 
+0

沒有。有'if'和'?:',但都不是這樣的。 – CodesInChaos 2012-04-24 08:56:41

+0

我覺得想出一個增量是一個不好的例子,如果它有幫助,會增加一個。 – Konstantinos 2012-04-24 09:07:13

回答

11

什麼:

if (i<=5) i++; 

if (!(i>5)) i++;將工作太。


提示:沒有unless完全等效。

0

編輯:這是錯誤的,因爲Ruby unless不像我的想法循環。我回答得太快了。

錯誤答案下面


最接近syntactiaclly到與底座關鍵字和運營商將像

int x = 0; 
do 
{ 
    x++; 
} while (x < 5); 
+0

所以這個想法是。 [做些什麼]除非[條件] 你可以認爲它是一個顛倒如果 – Konstantinos 2012-04-24 09:00:51

+1

[是的,它是'if',但它不是一個循環](http://en.wikibooks.org/ wiki/Ruby_Programming/Syntax/Control_Structures#unless_expression) – Reniuz 2012-04-24 09:05:44

+0

@Konstantinos:您需要查看其他答案,這是錯誤的,因爲我誤解了ruby語法 – xan 2012-04-24 09:05:55

0

有」三元?: - 運算符:

i = i > 5 ? i : i + 1 
//if i>5 then i, else i++ 

(假設紅寶石代碼意味着我的想法)

+0

好的,如果'除非'是一個循環,那麼這是一個完全不同的東西......我應該提到,我不會說紅寶石。 – phg 2012-04-24 08:59:58

+0

[沒有它的不循環](http://www.tutorialspoint.com/ruby/ruby_if_else.htm) – Reniuz 2012-04-24 09:01:26

+0

這是可怕的代碼,它也不起作用。你的代碼是一個複雜的無操作。 – CodesInChaos 2012-04-24 09:09:29

21

你可以通過擴展方法實現這樣的功能。 例如:

public static class RubyExt 
{ 
    public static void Unless(this Action action, bool condition) 
    { 
     if (!condition) 
      action.Invoke(); 
    } 
} 

,然後用它像

int i = 4; 
new Action(() => i++).Unless(i < 5); 
Console.WriteLine(i); // will produce 4 

new Action(() => i++).Unless(i < 1); 
Console.WriteLine(i); // will produce 5 

var isWeatherBad = false; 
var weatherText = "Weather is nice"; 
new Action(() => weatherText = "Weather is good!").Unless(isWeatherBad); 
Console.WriteLine(weatherText); 
+1

有趣的方法 – Konstantinos 2012-04-24 10:32:20

+0

擴展程序總是保存一天。 – 2016-09-12 22:20:18