Cercando di fare Feature
generico e poi improvvisamente compilatore dettoOperatore '?' Non può essere applicato a operandi di tipo 'T'
Operatore '?' Non può essere applicato a operandi di tipo 'T'
Ecco il codice
public abstract class Feature<T>
{
public T Value
{
get { return GetValue?.Invoke(); } // here is error
set { SetValue?.Invoke(value); }
}
public Func<T> GetValue { get; set; }
public Action<T> SetValue { get; set; }
}
E 'possibile utilizzare questo codice al posto
get
{
if (GetValue != null)
return GetValue();
return default(T);
}
ma mi chiedo come risolvere il problema quel bel one-liner C# 6.0.
Questo è davvero interessante. Penso che potrebbe essere un bug. Tutte le risposte che suggeriscono l'uso di 'where T: class' mancano del fatto che si sta verificando se' Func 'non è un' T', come mostra il secondo blocco di codice. Se funziona, la sintassi 'GetValue? .Invoke()' dovrebbe funzionare anche. Dovresti riuscire a scrivere: 'return GetValue? .Invoke() ?? default (T) ' –
kjbartel
@kjbartel: Penso che sia dovuto al fatto che'? .' restituisce 'null' se l'espressione era' null', e non 'default (T)'. – Joey
Func è annullabile. –
kjbartel