angewendet werden Der Versuch Feature
generic und dann plötzlich sagte CompilerOperator '?' kann nicht auf Operanden vom Typ ‚T‘
Operator zu machen ‚?‘ kann nicht auf Operanden vom Typ ‚T‘
hier angewendet werden, ist der Code
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; }
}
Es ist möglich, diesen Code zu verwenden, anstatt
get
{
if (GetValue != null)
return GetValue();
return default(T);
}
Aber ich frage mich, wie sie zu beheben das schöne C# 6.0 One-Liner.
Das ist wirklich interessant. Ich denke, es könnte ein Fehler sein. Alle Antworten, die 'schlagen vor, mit denen T: CLASS' der Tatsache fehlt, dass Sie nicht ein' T', als zweiten Codeblock zeigt null, wenn der 'Func' sind Kontrolle ist. Wenn das funktioniert, dann sollte die 'GetValue? .Invoke()' Syntax auch funktionieren. Sie sollten in der Lage sein zu schreiben: 'return GetValue? .Invoke() ?? default (T) ' –
kjbartel
@kjbartel: Ich glaube, es liegt daran, dass'? .' 'null' zurückgibt, wenn der Ausdruck' null' ist und nicht 'default (T)'. – Joey
Func ist nullfähig. –
kjbartel