मैं एक प्रकार का क्यू कार्यान्वयन लागू कर रहा हूं जिसमें एक TryDequeue
विधि है जो विभिन्न .NET TryParse
विधियों के समान एक पैटर्न का उपयोग करती है , जहां मैं बूलियन मान लौटाता हूं यदि कार्रवाई सफल हुई, और out
वास्तविक समाप्त मान को वापस करने के लिए एक पैरामीटर का उपयोग करें ।
public bool TryDequeue(out Message message) => _innerQueue.TryDequeue(out message);
अब, out
जब भी मैं कर सकता हूं मुझे परम से बचना पसंद है । C # 7 हमें उनके साथ काम करना आसान बनाने के लिए परिवर्तनीय विलंब प्रदान करता है, लेकिन मैं अभी भी एक उपयोगी उपकरण की तुलना में अधिक आवश्यक बुराईयों को अधिक मानता हूं।
इस विधि से मुझे जो व्यवहार चाहिए वह इस प्रकार है:
- यदि किसी वस्तु को धोखा देना है, तो उसे लौटा दें।
- यदि वहाँ कोई आइटम नहीं हैं (क्यू खाली है), कॉल करने वाले को उचित कार्य करने के लिए पर्याप्त जानकारी प्रदान करें।
- यदि कोई आइटम नहीं बचा है, तो बस एक अशक्त वस्तु वापस न करें।
- यदि कोई खाली कतार से हटने की कोशिश कर रहा हो तो अपवाद न फेंकें।
अभी, इस विधि का एक कॉलर लगभग हमेशा निम्न की तरह एक पैटर्न का उपयोग करेगा: (C # 7 बाहर चर वाक्यविन्यास का उपयोग करके):
if (myMessageQueue.TryDequeue(out Message dequeued))
MyMessagingClass.SendMessage(dequeued)
else
Console.WriteLine("No messages!"); // do other stuff
जो सबसे बुरा नहीं है, सब बताया गया है। लेकिन मैं मदद नहीं कर सकता, लेकिन लगता है कि ऐसा करने के अच्छे तरीके हो सकते हैं (मैं पूरी तरह से सहमत होना चाहता हूं कि ऐसा नहीं हो सकता)। मुझे नफरत है कि कैसे कॉल करने वाले को तोड़ना पड़ता है यह एक सशर्त के साथ प्रवाह होता है जब यह चाहता है कि एक मौजूद होने पर एक मूल्य प्राप्त हो।
कुछ अन्य पैटर्न जो इस "कोशिश" व्यवहार को पूरा करने के लिए मौजूद हैं?
संदर्भ के लिए, इस पद्धति को संभवतः वीबी परियोजनाओं में कहा जा सकता है, इसलिए दोनों में अच्छा काम करने वाले किसी चीज़ के लिए बोनस अंक। इस तथ्य को हालांकि बहुत कम वजन उठाना चाहिए।
Option<T>
संरचना को परिभाषित करें और इसे वापस करें। वेbool Try(..., out data)
कार्य एक घृणा हैं।