Sempre “no conversione implicita tra ” <null>’ e ‘Sistema.DateTime” messaggio di errore

In una domanda precedente:

Ottenere “Questo metodo o una proprietà non può essere chiamato su valori Null,” errore

Ho avuto un problema con il seguente codice:

client_group_details.Add(new ClientGroupDetails(
    reader.GetString(Col2Index),
    reader.GetString(Col3Index)));

Cui mi è stato sempre il seguente errore:

Data is Null. This method or property cannot be called on Null values.

Questo problema è stato risolto utilizzando il seguente codice:

client_group_details.Add(new ClientGroupDetails(
    reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
    reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index)));

Ora ho un problema simile con GetDateTime e GetInt32, come esempio:

client_group_details.Add(new ClientGroupDetails(
    reader.GetString(Col2Index),
    reader.GetString(Col3Index),
    reader.GetDateTime(Col4Index)));

Ho provato ad utilizzare le seguenti operazioni per risolvere questo problema, ma non ha funzionato

client_group_details.Add(new ClientGroupDetails(
    reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
    reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
    reader.IsDbNull(Col2Index) ? null : reader.GetDateTime(Col4Index)));

Dà l’errore:

Compiler Error Message: CS0173: Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'

Dopo la ricerca di una soluzione, ho trovato: Tipo Nullable problema ?: Operatore Condizionale. Ma quando ho provato a usare il codice, ho sempre ) expected.

Come posso risolvere questo problema?

Contare il numero di parentesi. Si hanno più di sinistra parentesi di destra parens.
Posta il codice che si è tentato di utilizzare che ha causato il ) expected errore. Questo è un semplice errore di sintassi che dovrebbe essere facile da risolvere.
Grazie a John Saunders per precisare ho perso il punto del tutto. Risposta eliminata.
20 ore e ancora nessun segno di il codice con il problema attuale con la parentesi. La chiusura troppo non è una vera domanda.

OriginaleL’autore oshirowanen | 2012-02-22

2 Replies
  1. 8

    Manca una parentesi quadra di chiusura da qualche parte.

    client_group_details.Add(new ClientGroupDetails(
        reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
        reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
        reader.IsDbNull(Col2Index) ? null : reader.GetDateTime(Col4Index)));

    Probabilmente dovrebbe cambiare

    client_group_details.Add(new ClientGroupDetails(
        reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
        reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
        reader.IsDbNull(Col2Index) ? (DateTime?)null : reader.GetDateTime(Col4Index)));

    o qualcosa di simile. Secondo il codice esatto, qualcuno sarà in grado di dirvi dove la parentesi mancante.

    OriginaleL’autore James Osborn

  2. 8

    DateTime è un struct e quindi un tipo di valore e non può essere null. Solo i tipi di riferimento e Nullable<> tipi può essere null. È necessario utilizzare un Nullable<DateTime>. Questo può anche essere scritto come DateTime?.

    DateTime? dt = null;
    dt = DateTime.Now;
    if (dt.HasValue) ...
    if (dt == null) ...
    DateTime x = dt.Value;
    
    dt = reader.IsDBNull(Col2Index) ? (DateTime?)null : reader.GetDateTime(Col4Index);
    Questo è ciò che ho cercato, ma ho sempre ) expected.
    Provare a utilizzare reader.IsDBNull(Col2Index) ? (DateTime?)null : reader.GetDateTime(Col4Index). L’operatore ternario è confuso, perché non è possibile determinare il tipo di null.
    Si dispone di un errore di sintassi da qualche parte. Hai più ( di ). Prova ad aggiungere un ) alla fine.
    il codice che genera l’ ) expected di errore. l’Aggiunta di ) alla fine può o non può risolvere il problema.

    OriginaleL’autore Olivier Jacot-Descombes

Lascia un commento