2009-06-26 12 views
15

मेरे पास एक ऑब्जेक्ट है जो मुझे घड़ी विंडो के माध्यम से कई बार फ़ंक्शन आउटपुट देखना है। समस्या यह है कि हर बार जब मैं कदम उठाता हूं तो मुझे रीफ्रेश बटन दबा देना पड़ता है क्योंकि "यह अभिव्यक्ति साइड इफेक्ट्स का कारण बनती है और इसका मूल्यांकन नहीं किया जाएगा"। क्या किसी फ़ंक्शन को [DoNotCauseSideEffects] जैसे किसी टैग को टैग करने का कोई तरीका है, इसलिए जब भी मैं कोई कदम उठाता हूं तो घड़ी स्वचालित रूप से इसका मूल्यांकन कर सकती है?विजुअल स्टूडियो: डीबगर को जागरूक करें कि एक फ़ंक्शन "साइड इफेक्ट्स" का कारण नहीं बनता है

मैं कोडिंग कर रहा हूँ सी में VS2008 # या 2010

संपादित करें:। समारोह इस तरह दिखता है और करता है, जैसा कि आप देख सकते हैं, कोई साइड इफेक्ट का कारण नहीं (एक्स, वाई, जेड सभी कर रहे हैं युगल)

public override string ToString() 
{ 
    return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}"; 
} 
+0

शायद यदि आपने अभिव्यक्ति और/या कोड अंश शामिल किए हैं, तो हम आपको बता सकते हैं कि ऐसा क्यों लगता है। –

उत्तर

3

नहीं यह संभव नहीं है। फ़ंक्शन का दुष्प्रभाव होगा या नहीं, इसका निर्धारण यह है कि वास्तव में भाषा विशिष्ट अभिव्यक्ति मूल्यांकनकर्ता द्वारा किया जाता है।

दोनों सी # और वीबी.Net के पास अलग-अलग ईई हैं और प्रत्येक के पास इसका स्वयं का दृढ़ संकल्प है कि फ़ंक्शन पर दुष्प्रभाव नहीं हैं या नहीं। आम तौर पर, वे दोनों साइड इफेक्ट्स के लिए एक स्पष्ट फ़ंक्शन कॉल पर विचार करते हैं और उन्हें स्टेपिंग जैसी स्थितियों में संसाधित नहीं करेंगे, जहां डीबगर साइड इफेक्ट्स को अक्षम करना चाहता है।

संपत्ति के उपयोग के लिए इस के आसपास काम करने का सबसे आसान तरीका है। डिफ़ॉल्ट रूप से संपत्ति के उदाहरणों को साइड इफेक्ट्स नहीं माना जाता है और वे चरण पर मूल्यांकन करेंगे।

संपादित

कुछ गलतफहमी स्पष्ट करने के लिए चाहता था। किसी भी फ़ंक्शन के साइड इफेक्ट्स के निर्धारण के लिए न तो डीबगर या अभिव्यक्ति मूल्यांकनकर्ता किसी भी प्रकार का विधि निरीक्षण करेगा। वे बस एक समारोह की उपस्थिति को ध्यान में रखते हैं और संभावित रूप से साइड इफेक्ट्स के रूप में लेबल करते हैं। वे किसी भी तरह से विधि के कोड का निरीक्षण करने का प्रयास नहीं करते हैं।

+1

यह उत्तर ** पूरी तरह से शामिल ** प्रतीत होता है। नीचे जवाब देखें; आप घड़ी अभिव्यक्ति के लिए 'एसी' जोड़ सकते हैं और यह डीबगर को स्वचालित रूप से फिर से मूल्यांकन करने के लिए मजबूर करेगा। – Jez

+0

@ जेज़ जो आसपास काम करता है वह सार्वभौमिक नहीं है। यह सी # के लिए काम करता है लेकिन VB.Net – JaredPar

+4

वीबी का उपयोग न करने का अधिक कारण नहीं है।नेट ;-) – Jez

-2

क्या आपने इसे बनाने का प्रयास किया है ताकि फ़ंक्शन किसी वर्ग गुण या वैश्विक चर को संशोधित न करे? "दुष्प्रभाव" की मेरी ऑफ-द-कफ परिभाषा "निष्पादन वातावरण में परिवर्तन है जो किसी फ़ंक्शन के निष्पादन के दौरान की जाती है"। इसलिए इस समारोह दुष्प्रभाव का कारण बनता है:

void addValues(int operand1, int operand2) { 
    globalSum = operand1 + operand2; 
} 

लेकिन यह काम नहीं करेगी:

int addValues(int operand1, int operand2) { 
    return operand1 + operand2; 
} 

यह हमेशा जब भी संभव दुष्प्रभाव से बचने के लिए बेहतर है। वे डिबगिंग में समस्याएं पैदा कर सकते हैं। this wikipedia article देखें।

+0

यह काम नहीं करता है। ईई किसी भी तरह से फ़ंक्शन का निरीक्षण करने का प्रयास नहीं करता है, वे बस ध्यान देते हैं कि यह एक संपत्ति नहीं है और इसे संभावित रूप से साइड इफेक्ट्स के रूप में लेबल किया गया है। – JaredPar

19

आप यह स्वचालित रूप से मूल्य को ताज़ा करने के लिए घड़ी अभिव्यक्ति को ,ac संलग्न कर सकते हैं:

x.ToString(),ac 

अधिक जानकारी और अन्य format specifiers के लिए MSDN देखें।

संबंधित मुद्दे