OneOf C# (.NET): पूरी गाइड उदाहरणों के साथ
OneOf लाइब्रेरी C# भाषा के लिए discriminated unions (विभेदित संघ) का एक कार्यान्वयन है। यह एक मूलभूत समस्या को हल करती है: एक स्थिर रूप से टाइप की गई भाषा में उस मान को सुरुचिपूर्ण ढंग से कैसे प्रस्तुत किया जाए जो कई पूर्व निर्धारित प्रकारों में से एक हो सकता है। object को टाइप कास्टिंग के साथ, Nullable का उपयोग करने या क्लास पदानुक्रम बनाने के बजाय, OneOf ऐसे मानों के साथ काम करने का एक टाइप-सुरक्षित और अभिव्यंजक तरीका प्रदान करता है।
इसकी आवश्यकता क्यों है? सबसे पहले, यह कोड की पठनीयता बढ़ाता है: OneOf<Success, Error> लौटाने वाली विधि का सिग्नेचर तुरंत बताता है कि ऑपरेशन सफलता या त्रुटि में समाप्त हो सकता है। दूसरा, यह गलत टाइप कास्टिंग से संबंधित त्रुटियों के एक पूरे वर्ग को समाप्त करता है। तीसरा, OneOf डेवलपर को सभी संभावित विकल्पों को संभालने के लिए मजबूर करता है, जो कोड को अधिक विश्वसनीय और पूर्वानुमानित बनाता है। यह विशेष रूप से उन परिदृश्यों में उपयोगी है जहां पारंपरिक रूप से अपवाद (नियंत्रण प्रवाह के लिए) या null वापसी का उपयोग किया जाता है।
OneOf C# में कार्यात्मक प्रोग्रामिंग शैली में पूरी तरह से फिट बैठता है। यह डोमेन को अधिक सटीक रूप से मॉडल करने की अनुमति देता है: फ़्लैग और नेस्टेड ऑब्जेक्ट वाला Result क्लास रखने के बजाय, आप OneOf<T0, T1, T2> का उपयोग कर सकते हैं, जहां प्रत्येक प्रकार संभावित स्थितियों में से एक का प्रतिनिधित्व करता है। यह कोड को अधिक घोषणात्मक बनाता है और if-else निर्माणों की संख्या को कम करता है।
इंस्टॉलेशन
लाइब्रेरी की स्थापना NuGet Package Manager के माध्यम से की जाती है। अपने टूल के आधार पर निम्नलिखित कमांड में से एक को निष्पादित करें:
# Package Manager Console
Install-Package OneOf
# .NET CLI
dotnet add package OneOf
# PackageReference (मैन्युअल रूप से .csproj में)
<PackageReference Include="OneOf" Version="3.0.271" />
इंस्टॉलेशन के बाद, अपनी फ़ाइल की शुरुआत में using OneOf; जोड़ें।
त्वरित शुरुआत
आइए एक सरल उदाहरण देखें: एक फ़ंक्शन जो एक संख्या को दूसरी संख्या से विभाजित करता है। शून्य से विभाजित करने पर अपवाद फेंकने के बजाय, हम OneOf<double, string> लौटाएंगे - या तो परिणाम या त्रुटि संदेश।
using OneOf;
public OneOf<double, string> SafeDivide(double a, double b)
{
if (b == 0)
return "त्रुटि: शून्य से विभाजन";
return a / b;
}
// उपयोग
var result = SafeDivide(10, 2);
result.Switch(
value => Console.WriteLine($"परिणाम: {value}"),
error => Console.WriteLine($"त्रुटि: {error}")
);
// आउटपुट: परिणाम: 5
ध्यान दें: हम out-पैरामीटर का उपयोग नहीं कर रहे हैं, null की जांच नहीं कर रहे हैं, और न ही अपवादों को पकड़ रहे हैं। हमें बस इतना करना है कि Switch या Match को कॉल करें और प्रत्येक संभावित विकल्प के लिए हैंडलर प्रदान करें।
मुख्य तरीके और क्लासेस
लाइब्रेरी विभेदित संघों के साथ काम करने के लिए कई प्रमुख तंत्र प्रदान करती है। आइए उनमें से प्रत्येक को विस्तार से देखें।
1. OneOf<T0, T1, ...>
सिग्नेचर: public class OneOf<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> : IOneOf
कार्य: बेस क्लास जो एक मान का प्रतिनिधित्व करता है जो निर्दिष्ट प्रकारों में से एक हो सकता है। अधिकतम 9 प्रकारों का समर्थन करता है। निर्दिष्ट प्रकारों में से किसी से OneOf में अंतर्निहित रूपांतरण।
OneOf<int, string, bool> value = 42; // अंतर्निहित रूपांतरण
value = "hello";
value = true;
// स्पष्ट निर्माण
var explicitValue = new OneOf<int, string>(100);
2. Switch
सिग्नेचर: public void Switch(Action<T0> f0, Action<T1> f1, ...)
कार्य: OneOf में संग्रहीत मान के आधार पर पारित क्रियाओं में से एक को निष्पादित करता है। कुछ भी वापस नहीं करता है।
पुस्तकालय में भी
TypeScript में कार्य शेड्यूलर: node-schedule लाइब्रेरी के लिए विस्तृत गाइड
C++ मानक पुस्तकालय: पूर्ण अवलोकन और कोड उदाहरण
TypeScript पर QR कोड जनरेटर: qrcode लाइब्रेरी और इसका उपयोग
OpenSSL C++: पूर्ण गाइड उदाहरणों के साथ
C++ में YAML के साथ कार्य: पार्सिंग और सीरियलाइज़ेशन के लिए yaml-cpp लाइब्रेरी