2015-09-23 12 views
9

sto ottenendo l'errore:Un valore di tipo '<null>' non può essere utilizzato come parametro di default perché non ci sono conversioni standard di tipo 'T'

A value of type '' cannot be used as a default parameter because there are no standard conversions to type 'T'

durante il tentativo di scrivere questo pezzo di codice

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = null); 

Qualcuno ha idea di come creare tipi di valori nulli. C'è un modo per fare questo?

+1

'protetta T GetValue (Espressione > proprietà, T defaultValueIfNull = null) dove T: class' –

risposta

15

Non ci sono vincoli sul tipo T, quindi può essere un tipo di valore.
si può riscrivere definizione di metodo come

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = default(T)); 


che significherà null per i tipi di riferimento e il valore di default per i tipi di valore.

+1

in realtà, se non si ha intenzione di passare i tipi di valore a questo metodo, sarà meglio aggiungere vincolo sul metodo o (se il tipo T è definito dalla classe) in classe. –

+0

Questo mi ha veramente aiutato a risolvere il problema. :) tq –

7

T in questo caso potrebbe anche essere un tipo di valore, ad esempio int, che non può essere null. È necessario specificare un vincolo di tipo, limitando T alle classi:

...T defaultValueIfNull = null) where T : class 

Un'alternativa sarebbe utilizzando ...T defaultValueIfNull = default(T)) - non avrebbe bisogno il vincolo, ma i tipi di valore sarebbe diventato 0 di default, invece di null.

Problemi correlati