Ich habe eine generische Methode mit diesem (Dummy) Code (ja ich bin bewusst, IList hat Prädikate, aber mein Code ist nicht mit IList, aber einige andere Sammlung, sowieso ist dies irrelevant für die Frage...)
static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
foreach T thing in collection
{
if (thing.Id == id)
return thing;
}
return null; // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead.
}
Dies führt zu einem Fehler bei der Erstellung
"Kann nicht in den Typ-Parameter null konvertiert werden T' konvertiert werden, da er ein Wertetyp sein könnte. Erwägen Sie stattdessen die Verwendung von 'default(T)'."
Kann ich diesen Fehler vermeiden?
0 Stimmen
Wären nullbare Referenztypen (in C# 8) jetzt die bessere Lösung für dieses Problem? learn.microsoft.com/de-us/dotnet/csharp/nullable-references Rücksendung
null
unabhängig davon, obT
esObject
oint
ochar
.0 Stimmen
Schade, dass
T?
in der Signatur funktioniert nicht. @Alexander-ReinstateMonica Ich habe den Artikel gelesen, konnte aber keine Möglichkeit sehen, zurückzukehrennull
unabhängig vom Referenz- oder Wertetyp.1 Stimmen
@mireazma Das sind viel zu wenige Informationen, als dass ich helfen könnte. Sie sollten eine neue Frage eröffnen.
0 Stimmen
Das Hauptproblem, das ich sehe, ist, dass Sie versuchen, die
null
als Hinweis darauf, dass dort etwas nicht stimmt. Ich würde vorschlagen, stattdessen eine Ausnahme auszulösen. Deshalb gibt es Ausnahmen und man kann die Verdrahtung weglassenif (... != null)
überall.