Optionale Rückgabe in C # .Net
Java 1.8 ist Empfang die Optionale Klasse, die es uns ermöglicht, die explizit sagen, wenn eine Methode einen null-Wert zurück und die "Kraft" seiner Verbraucher, um zu überprüfen, ob es nicht null ist ( isPresent()
), bevor Sie es.
Sehe ich hat C# eine null-Werte zulässt, dass etwas ähnliches macht, aber mit basic-Typen. Es scheint verwendet werden, für DB-Abfragen, um zu unterscheiden, wenn ein Wert vorhanden ist und 0, wenn es nicht existiert und null ist.
Aber es scheint, dass in C#Nullable funktioniert nicht für Objekte, die nur für Grundtypen, während Java ist Optional, funktioniert nur für Objekte und nicht für basic-Typen.
Gibt es eine null - /Optional Klasse in C#, das uns zwingt um zu testen, ob Objekt vorhanden ist, bevor das extrahieren und verwenden?
InformationsquelleAutor der Frage Hikari | 2013-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht in der Sprache, Nein, aber Sie können Ihre eigenen:
Beachten Sie, dass Sie nicht in der Lage zu emulieren bestimmte Verhaltensweisen von
Nullable<T>
wie die Möglichkeit zur box eine null-Wert kein Wert auf null, sondern als ein boxed-null-Werte zulässt, da es spezielle compiler-Unterstützung für diese (und einige andere) Verhalten.InformationsquelleAutor der Antwort Servy
Gibt es bessere Umsetzung der option-Typ in C#. Sie finden diese Implementierung in Taktische design-patterns in .NET von Zoran Horvat auf pluralsight.com. Es beinhaltet eine Erklärung, warum und wie es zu benutzen. Die grundlegende Idee ist die Umsetzung der option-Klasse als Implementierung von IEnumerable<> Schnittstelle.
InformationsquelleAutor der Antwort Lukáš Kmoch
Meiner Meinung nach jeder
Option
Umsetzung, welche machtHasValue
Eigenschaft ist die Niederlage der gesamten Idee. Der Punkt, der optionale Objekte ist, dass Sie machen können, bedingungslose Anrufe, deren Inhalte ohne Prüfung, ob der Inhalt da ist.Wenn Sie haben, um zu testen, ob das optionale Objekt enthält einen Wert, dann haben Sie nichts getan, neu im Vergleich zur gemeinsamen
null
tests.Hier ist der Artikel, in dem ich bin, zu erklären, optionale Objekte in full-detail: Benutzerdefinierte Implementierung der Option/Vielleicht-Typ in C#
Und hier ist der GitHub-repository mit code und Beispielen: https://github.com/zoran-horvat/option
Wenn Sie zögern, eine Schwergewichts-Option Lösung, dann können Sie ganz einfach bauen eine leichte. Sie können Ihre eigenen
Option<T>
Art, die implementiertIEnumerable<T>
- Schnittstelle, so dass Sie nutzen können LINQ-extension-Methoden ruft ihrerseits optional. Hier ist die einfachste mögliche Umsetzung:Verwendung dieser
Option<T>
Typ erfolgt über LINQ:Finden Sie mehr über optionale Objekte, die in diesen Artikeln:
Und Lesen Sie meine video-Kurse für weitere Informationen, wie zur Vereinfachung der Ablaufsteuerung mit
Option
Art und anderen Mitteln: Machen Sie Ihre C# - Code Mehr Funktionale undTaktische Design-Patterns in .NET: Ablaufsteuerung
Den ersten video-Kurs (Machen Sie Ihre C# - Code Mehr Funktionale) bringt eine detaillierte Einführung in die Eisenbahn-oriented programming, einschließlich der
Either
undOption
Arten es gibt und wie Sie verwendet werden können, zu verwalten optionale Objekte und behandeln von Ausnahmefällen und Fehlern.InformationsquelleAutor der Antwort Zoran Horvat
In das Projekt "C# - funktionale Sprache-Erweiterungen" https://github.com/louthy/language-ext
existiert die Option-Objekt von F# unter anderem funktionale prasselt
InformationsquelleAutor der Antwort aloon
Vielleicht ist das näher an der F# - Option geben
InformationsquelleAutor der Antwort gileCAD
Nullables wurden so erstellt, dass primitive Typen könnte null sein. Deren default-Wert nicht haben, um eine tatsächliche Wert (Wie int, ohne nullables der default ist 0, also ist, eine 0 bedeutet, dass etwas 0 oder nicht gesetzt, was 0?)
Nein, es gibt nichts, dass Sie tun können, um zu erzwingen, ein Programmierer, um zu überprüfen, ob ein Objekt null ist. Das ist gut so. Dabei wäre ein immenser Aufwand. Wenn diese Sprache-Funktion, wie oft würden Sie zwingen überprüfen? Würde Sie es benötigen, wenn die variable wird zuerst zugewiesen? Was ist, wenn die variable verweist auf ein anderes Objekt später? Würde Sie zwingen, es zu überprüfen, bevor Sie jede Methode und Eigenschaft, und wenn es nicht gelingt, würdest du eine exception werfen? Sie bekommen nun mit einem null-Verweis-Ausnahme. Sie würde sehr wenig profitieren, dass jemand, dies zu tun über das hinaus, was Sie bereits haben.
InformationsquelleAutor der Antwort kemiller2002
Es gibt nichts, built-in, aber Sie können Ihre eigenen definieren. Beachten Sie, dass eine
Option<T>
Umsetzung nicht sinnvoll ist, ohne Definition der Karte/bind-Operatoren.InformationsquelleAutor der Antwort Lee
Statt zu schreiben eine eigene Klasse, die Sie nutzen könnten
Microsoft.FSharp.Core.FSharpOption<T>
von derFSharpCore.dll
Montage. Leider, die F# - Typen sind ein bisschen ungeschickt, wenn verwendet, in C#.InformationsquelleAutor der Antwort tearvisus
Ich beschlossen, die irgendeine Art von Optionalen<> Java-Klasse Prototyp vor einiger Zeit mit einer der letzten C# - version.
Hier ist es in der Tat:
}
InformationsquelleAutor der Antwort E. Anagnostopoulos