2009-03-23 11 views
17

Stavo scrivendo un certo codice in C#, e mi sono ritrovato a scrivere:Qual è il blocco di istruzioni legali più lungo che è possibile creare con solo parole chiave C#?

return new MyClass(... 

quando ho notato che sia la return e new erano entrambi C# parole chiave. Quindi mi sono chiesto quale sia la sequenza legale più lunga di parole chiave in C#. Tutto quello che potevo pensare è:

internal static override void MyFunc(... 

Dove internal static override void sono tutte le parole chiave. Riesci a pensare a una sequenza più lunga di parole chiave?

Nota: non c'è davvero alcun senso alla domanda. Sto solo sperando di versare più un certo divertimento sul fuoco :-)

+1

Non è più simile a "anti golf"? –

+1

override statico? –

+0

hmm sì, override statico - beh, ad essere onesti, non ha detto che il codice doveva compilare ... ;-) – Razzie

risposta

43

Per 6:

new protected internal unsafe virtual decimal Foo() {...} 

Edit per 7:

new protected internal unsafe virtual extern decimal Foo(); 

Se consentiamo staffe e controventi ...

(modificato il "blocco", "nuovo oggetto()", "come" e "stringa" sono stati forniti da altri; vedi commenti)

decimal Bar() { 
    lock (new object() as string) { 
     if (true) { 
      checked { 
       unsafe { 
        try { 
         do { 
          return default(decimal); 
          unchecked {break;} 
          continue; 
         } while (false); 
        } 
        catch { throw; } 
        finally { } 
       } 
      } 
     } 
    } 
} 
+0

Impressionante! – scraimer

+0

se si contano i caratteri: nuova stringa extern virtuale protetta non protetta Foo(); – andleer

+0

decimale sarebbe meglio ;-p –

1
internal protected static volatile string foo = "bar"; 

Ecco 5.

-2

Posso imbrogliare?

internal protected static volatile StringBuilder @string = 
    new StringBuilder(int.Parse("12")); 

sfruttando il fatto che posso usare una parola chiave o altro termine riservato come nome di variabile se anteporre con una @ - entra a 9 se si consente la duplicazione di StringBuilder.

+5

StringBuilder non è una parola chiave, né è Parse –

+0

Non ho mai saputo della cosa @! Ma non credo che StringBuilder conti come una parola chiave. È solo una lezione, no? – scraimer

+0

Abbastanza giusto. Inoltre non avevo il conteggio Parse, ma eseguivo il doppio conteggio di StringBuilder. –

32

credo sia infinito:

return null as string as string as string as string as string.... 
+0

Abbiamo un vincitore! –

+2

Pah; Preferirei termini * diversi * ... ma non posso discuterne la verità ... –

+0

Questo influenzerebbe il compilatore? –

2

Ecco un altro caso che può essere lungo quanto si desidera:

do do do do do do do do do do do do do do do // ... 
while(x) while(x) while(x) while(x) while(x) // ... 

Con parole chiave contestuali si può anche avere

await await await await await await await // ... 
0

Un'altra variante con la definizione del metodo (trovata dal mio collega):

protected internal override sealed unsafe async void await() { ... } 

Rende 8 parole chiave di seguito. Usa il fatto che await è una parola chiave contestuale, quindi può essere riutilizzata per il nome del metodo.

Problemi correlati