2012-04-24 10 views
13

C'è un modo per fare qualcosa di simile in C#?Ruby-like 'unless' per C#?

ie.

i++ unless i > 5; 

Ecco un altro esempio

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

no. C'è 'if' e'?: ', Ma non funziona così. – CodesInChaos

+0

Penso che venire con un incremento sia stato un cattivo esempio, ne aggiungerò un altro nel caso in cui aiuti. – Konstantinos

risposta

11

Che dire:

if (i<=5) i++; 

if (!(i>5)) i++; avrebbe funzionato troppo.


Suggerimento: Non c'è unless esatto equivalente.

0

EDIT: Questo è sbagliato come il Rubino unless non ciclo come la mia idea. Ho risposto troppo velocemente.

Risposta sbagliata sotto


La syntactiaclly più vicina a quella con le parole chiave di base e gli operatori sarebbe qualcosa di simile

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

quindi l'idea sarebbe. [fare qualcosa] a meno che [condizione] si può pensare ad un inverso se – Konstantinos

+1

[sì, è opposto 'se', ma non è un ciclo] (http://en.wikibooks.org/ wiki/Ruby_Programming/Sintassi/Control_Structures # unless_expression) – Reniuz

+0

@Konstantinos: è necessario rivedere le altre risposte, questo è sbagliato in quanto avevo frainteso la sintassi ruby ​​ – xan

0

C'è' ternario ?: -operator:

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

(Supponendo che il codice rubino significhi quello che penso)

+0

OK, se 'unless' è un ciclo, allora è tutta un'altra cosa ... Dovrei dire che non parlo ruby. – phg

+0

[no its non loop] (http://www.tutorialspoint.com/ruby/ruby_if_else.htm) – Reniuz

+0

Questo è un codice orribile e non funziona affatto. Il tuo codice è un no-op complicato. – CodesInChaos

21

È possibile ottenere qualcosa di simile con i metodi di estensione. Per esempio:

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

e quindi utilizzarlo come

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

approccio interessante – Konstantinos

+0

Le estensioni salvano sempre il giorno. –