2012-10-23 16 views
7

Ho fatto un errore di battitura e di Visual Studio non ha segnato come un errore:Che cos'è `Nullable <T>?`?

void Method(Nullable<SpriteFont>? font = null) { }

font presenta come SpriteFont?? in uscita. Cosa ho fatto?

UPD: Scusate, tutti, non ho provato a compilarlo, non si è presentato come un errore finché non l'ho fatto. Tuttavia, è strano che sembrasse come Type?? in uscita.

Inoltre SpriteFont è già annullabile, così mi stava per ottenere un errore comunque :(

+9

Hai definito il carattere come Nullable > – manman

+1

Pensavo che i tipi che accettano valori nulli non potessero essere resi nullable ... come le classi. –

+0

@manman: mettilo come risposta – zerkms

risposta

4

ho provato qui, solo ora ... e non ho potuto riprodurre ciò che si sayd.

Tutto delle seguenti affermazioni non riescono a compilare:

  • Nullable<int>? a = 1;
  • Nullable<Nullable<int>> b = 1;
  • Nullable<int?> a = 1;
  • void A(Nullable<Nullable<int>> a)
  • void A(Nullable<int>? a)
  • void A(Nullable<int?> a)

utilizzando Visual Studio 2012, C# 4 o 5 Penso, .Net Framework 4.5.

+2

@Vulcan: No, penso che sia una risposta, perché la domanda sembra sbagliata così com'è. – Mehrdad

+2

@Vulcan: nessuna risposta esiste per domande sbagliate o false affermazioni ... solo contro esempi. –

+3

Questa è in realtà una risposta. E quando le risposte fondamentalmente dicono "Non ho idea di come hai ottenuto quello che hai fatto", la domanda è di solito il problema :) –

4

Il controllo sintassi dell'editor non è riuscito a contrassegnarlo come un errore con gli scarabocchi rossi. Non il compilatore.

Due blocchi distinti di codice. Devono essere, il codice di controllo della sintassi mentre lo si digita, in sostanza sempre rotto, richiede un approccio molto diverso.

+0

Questa è l'unica spiegazione! Significa anche che la domanda è stata fatta senza compilare effettivamente il codice. –