Die where T : struct
-Einschränkung ermöglicht es, die Domäne akzeptabler Typparameter auf die Menge von Werttypen zu beschränken (im Vergleich zu der Obermenge von Typen, die Wert- und Referenztypen einschließen), verbietet aber auch Nullwerttypen, obwohl Nullable dies nicht tut bedeutet in modernen Versionen von C# unbedingt einen Referenztyp.Wie beschränke ich einen generischen Typparameter, um nur Nullable-Werttypen in C# zu akzeptieren?
Was wäre, wenn ich Werttypen mit zusätzlicher NULL-Zulässigkeit wie int?
, DateTime?
usw. akzeptieren möchte, während native Nullable-Referenztypen wie String, IList usw. abgelehnt werden? Ist es möglich, die Einschränkungen auf diese Weise zu definieren? Wie wenn es ist?
Ich bin eigentlich neugierig zu lernen, beide Szenarien zu implementieren: Wenn der als Parameter verwendete Typ muss sowohl Wert und nullable sein und wenn ein Nullwert Typ akzeptiert werden soll, sowie eine nicht Nullable Werttyp und Ich denke, dass diese Aspekte eng genug sind, um beide zu entschuldigen, also würde ich einen bescheidenen Kommentar über den zweiten Fall schätzen und eine Antwort wählen, die sie als eine bessere enthält (vorausgesetzt, dass eine andere auf andere Weise nicht wirklich besser ist), wenn mehr als Eine Antwort wird gesendet und ich muss wählen, aber was ich jetzt wirklich brauche, ist der erste Fall (um immer einen Typ zu verlangen, der sowohl Nullwert als auch Werttyp gleichzeitig ist) und ich glaube auch an den zweiten Fall wird ziemlich einfach angesichts der Kenntnis der ersten sein, ganz zu schweigen davon, es ist keine gute Art, darauf zu bestehen, 2 Fragen in einen zu kleben, so werde ich abs schätze und akzeptiere eine Antwort nur im ersten Fall.
Haben Sie versucht, System.Nullable als Einschränkung zu verwenden? https://msdn.microsoft.com/en-us/library/b3h38hb0.aspx –
linuxuser27
leider generische Einschränkungen auf C# sind begrenzt und niemand kann eine Antwort mit einer Funktion, die nicht existiert, nicht einmal Eric Lippert :) –
@ SelmanGenç D'oh! Stimmt. Ich vergesse diese Einschränkung immer wieder.Ich hatte VS nicht vor mir, also konnte ich es testen :) – linuxuser27