2012-02-10 10 views
132

Perché ottengo l'errore "Il tipo 'stringa' deve essere un non -nullabile tipo di valore per utilizzarlo come parametro 'T' nel tipo generico o nel metodo 'System.Nullable' "?Il tipo 'stringa' deve essere un tipo non annullabile per utilizzarlo come parametro T nel tipo generico o nel metodo 'System.Nullable <T>'

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using Universe; 

namespace Universe 
{ 
    public class clsdictionary 
    { 
     private string? m_Word = ""; 
     private string? m_Meaning = ""; 

     string? Word { 
      get { return m_Word; } 
      set { m_Word = value; } 
     } 

     string? Meaning { 
      get { return m_Meaning; } 
      set { m_Meaning = value; } 
     } 
    } 
} 
+15

'String' è già annullabile. –

+19

Non c'è motivo per cui questa domanda dovrebbe ricevere un -1. A parte la possibilità di essere un dup. –

risposta

164

Uso string invece di string? in tutti i luoghi nel codice.

Il tipo Nullable<T> richiede che T sia un tipo di valore non annullabile, ad esempio int o DateTime. I tipi di riferimento come string possono già essere nulli. Non avrebbe senso permettere cose come Nullable<string> quindi non è consentito.

Anche se si utilizza C# 3.0 o versione successiva è possibile semplificare il codice utilizzando auto-implemented properties:

public class WordAndMeaning 
{ 
    public string Word { get; set; } 
    public string Meaning { get; set; } 
} 
+1

M.Babcock, quando faccio m_Word = null, errori, suggerimenti? Voglio essere in grado di impostare Word come null. – MiscellaneousUser

+1

@MiscellaneousUser: quale messaggio di errore ricevi? Puoi pubblicare il file esatto che hai provato a compilare? È difficile indovinare quale sia il tuo errore vedendo solo una riga del tuo codice. Voglio dire, potrebbe essere che ti manca un punto e virgola ... ma forse hai semplicemente dimenticato di copiare + incollarlo ... Non è altro che una congettura finché non scrivi il codice che hai provato a compilare. –

+0

Grazie per l'aiuto, ho visto questo post http://stackoverflow.com/questions/187406/c-sharp-nullable-string-error e possiamo vedere che il punto interrogativo è solo per i tipi di valore. – MiscellaneousUser

46

string è un tipo di riferimento, una classe. È possibile utilizzare solo Nullable<T> o lo zucchero sintattico C# T? con valore non annullabile tipi come int e Guid.

In particolare, come string è un tipo di riferimento, un'espressione del tipo string può già essere nullo:

string lookMaNoText = null; 
3

Per un motivo specifico tipo Nullable<int> posizionare il cursore su Annullabile e cliccare F12 - La metadati fornisce la ragione (Nota il vincolo struct):

public struct Nullable<T> where T : struct 
{ 
... 
} 

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+4

Nota che 'Nullable >' non è consentito anche se 'Nullable ' è una struttura. –

+0

È interessante. Questo è "hardcoded" nel compilatore? Come è vincolato da una struttura specifica (Nullable >)? - Modifica vedo ora apparentemente è speciale - Errore di compilazione ... deve essere un tipo di valore non annullabile .... –

11

Syst em.String è già annullabile: non è necessario dichiararlo come tale (stringa? myStr) è sbagliato.

Problemi correlati