jasso Geschrieben 5. April 2019 Teilen Geschrieben 5. April 2019 Hallo, ich möchte aktuell in einer Typisierten Klasse (bzw. erstmal im Interface) einen Typ als Nullable definieren. Geht das überhaupt? Ich kann leider nichts dazu finden. public interface IBaseElement<T> { void InsertOrUpdate(T? givenDBElement = null); } ist leider nicht erlaubt da T per se mal nicht nullable ist. Ich hätte auch versucht etwas wie public interface IBaseElement<T> where T : Nullable { void InsertOrUpdate(T? givenDBElement = null); } zu verwenden, aber auch das akzeptiert mir der Compiler nicht. Danke LG Jasso Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
arlegermi Geschrieben 5. April 2019 Teilen Geschrieben 5. April 2019 Wenn du damit leben kannst, nur Klassen als generischen Typ zu nutzen kannst du das mit public interface IBaseElement<T> where T : class machen - die sind dann auch nullable. Wenn das auch für structs funktionieren soll, kommst du kaum um Runtime-Checks herum, sowas wie das hier: if(Nullable.GetUnderlyingType(typeof(T)) != null) { "Nullable!".Dump(); } else if(typeof(T).IsValueType) { "struct".Dump(); } else { "class".Dump(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
KeeperOfCoffee Geschrieben 5. April 2019 Teilen Geschrieben 5. April 2019 vor 28 Minuten schrieb jasso: Ich kann leider nichts dazu finden. https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters https://docs.microsoft.com/de-de/dotnet/api/system.nullable-1?view=netframework-4.7.2 https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/nullable-types/how-to-identify-a-nullable-type Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 5. April 2019 Autor Teilen Geschrieben 5. April 2019 @arlegermi: "nur Klassen" würde mir vollkommen reichen. Leider funktioniert es damit ebenfalls nicht. Mit ... public interface IBlub<T> where T : class { void InsertOrUpdate(T? givenDBElement = null); } … bekomme lediglich vom Compiler die Meldung: Zitat Der Typ "T" darf keine NULL-Werte zulassen, wenn er als T-Parameter im generischen Typ oder in der generischen Methode "Nullable<T>" verwendet werden soll. @KeeperOfCoffe: Danke fürs nachgoogeln. Die Ergebnisse habe ich bereits gefunden. Helfen mir nur in meinem konkreten Fall leider nicht weiter. Danke LG Jasso Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
arlegermi Geschrieben 5. April 2019 Teilen Geschrieben 5. April 2019 Wenn du schon den Constraint where T : class hast, dann brauchst du kein ? mehr hinter dem Parameter - die sind ja eh nullable. Oder geht's dir hier gerade um das neue Sprachfeature mit nullable reference types in C# 8? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 5. April 2019 Autor Teilen Geschrieben 5. April 2019 au weh … da hast Du natürlich recht. War noch ein gedankliches Überbleibsel aus meinen ersten Versuchen. Danke so funktioniert es! LG Jasso Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.