के लिए डिज़ाइन पैटर्न मेरे पास एक कतार है जो ऑब्जेक्ट को थोड़ी देर लूप में संसाधित करती है। वे अतुल्यकालिक रूप से कहीं न कहीं जोड़ रहे हैं .. इस तरह:गतिशील सी # ऑब्जेक्ट
myqueue.pushback(String value);
और वे इस तरह कार्रवाई की जाती है:
while(true)
{
String path = queue.pop();
if(process(path))
{
Console.WriteLine("Good!");
}
else
{
queue.pushback(path);
}
}
अब, बात यह है कि मैं एक टीटीएल की तरह समर्थन करने के लिए इस संशोधित करना चाहते है (रहने का समय) ध्वज, तो फ़ाइल पथ एन बार से अधिक जोड़ा जाएगा।
bool process(String path)
फ़ंक्शन हस्ताक्षर को रखते हुए मैं यह कैसे कर सकता हूं? मैं इसे संशोधित नहीं करना चाहता हूं।
मैंने नक्शा रखने के बारे में सोचा था, या एक सूची जो इस बात की गणना करती है कि प्रक्रिया फ़ंक्शन पथ के लिए कितनी बार झूठी लौटाई गई है और झूठी की एन-वें वापसी पर सूची से पथ को छोड़ देता है। मुझे आश्चर्य है कि यह कैसे अधिक गतिशील रूप से किया जा सकता है, और अधिमानतः मैं चाहता हूं कि टीटीएल प्रक्रिया में प्रत्येक नए जोड़े में स्वचालित रूप से खुद को कम कर दे। मुझे उम्मीद है कि मैं कचरा नहीं बोल रहा हूँ। हो सकता है कि इस
class JobData
{
public string path;
public short ttl;
public static implicit operator String(JobData jobData) {jobData.ttl--; return jobData.path;}
}
आपको लगता है कि आपके 'जॉबडाटा' दृष्टिकोण में क्या गलत है? –
अच्छी बात यह है कि मैं प्रक्रिया फ़ंक्शन को संशोधित करना चाहता हूं, मैं सिर्फ 'जॉबडाटा' ऑब्जेक्ट चाहता हूं जो सी # में स्ट्रिंग में एक अंतर्निहित रूपांतरण करने में सक्षम है और गतिशील रूप से कुछ विचारों को स्पष्ट रूप से और स्पष्ट रूप से tll मान – AlexandruC
को कम करता है एक अतिरिक्त अतिरिक्त समाधान जो मैं उल्लेख करूंगा लेकिन समर्थन नहीं करता है, अपने टीटीएल काउंटर के साथ स्ट्रिंग प्रकार में एक एक्सटेंशन विधि जोड़ना है। आदर्श या अनुशंसित नहीं है क्योंकि यह हर जगह स्ट्रिंग करने के लिए एक अर्थहीन विधि जोड़ता है (यहां तक कि एक बहुत ही स्थानीय नामस्थान तक सीमित), लेकिन यह आपकी विशिष्ट समस्या को हल करेगा। –