मेरे सामने एक छोटी सी समस्या आई है (इस समय के लिए) जो निम्नलिखित है:

जब मैं विजुअल स्टूडियो कम्युनिटी 2017 में अपना कोड डीबग करता हूं और किसी फ़ोरैच के अंदर रहते हुए कुछ भी संपादित करता हूं, तो उस दायरे में सभी चर, जिसमें वेरिएबल को पुनरावृत्त किया जा रहा है, शून्य पर सेट हो जाते हैं।

foreach (var bFile in baseCache) {
    var file = lastFolder + "\\" + bFile.Value.relPath;
    if (!lastCache.ContainsKey(file)) {
        if (file.Length > 255) { continue; }
        // TODO: do stuff when the file isn't present in the last backup
    }

    var lFile = lastCache[file];
    var comp = bFile.Value.compare(lFile);
    if (!comp.HasFlag(FileData.CompareFlags.CRC32 & FileData.CompareFlags.Size)) {

    }
}

उदाहरण के लिए इस भाग में, मेरे पास चौथी पंक्ति में ब्रेकपॉइंट था, जहां यह जाता है यदि "lastCache" में उस समय "फ़ाइल" द्वारा दर्शायी गई कुंजी नहीं होती है।

उस समय बस जारी था; उस स्थान पर बैठे और मैंने इसे बदल दिया जैसा कि अभी दिखाया गया है, और जब मैंने आगे बढ़ने के लिए F10 दबाया क्योंकि मैं उस बिंदु पर इस मुद्दे को सत्यापित करना चाहता था, तो स्निपेट में दिखाए गए सभी चर 'शून्य' हो गए।

क्या कोई मुझे समझा सकता है कि ऐसा क्यों हो रहा है और मैं इससे कैसे बच सकता हूं?

वर्तमान में जब मैं चीजों को बदल रहा हूं तो यह केवल एक छोटी सी परेशानी है, लेकिन अगर बाद में एक बड़ी परियोजना में ऐसा होता है तो यह एक वास्तविक समस्या होगी ...

संपादित करें: यहां पूरे कोड का लिंक दिया गया है, यह सिर्फ एक कंसोल ऐप है, इसलिए सौभाग्य से, यह आसानी से किया जाता है https://www.pastiebin.com/5cf3e7dfa2985

0
BloodyRain2k 2 जून 2019, 15:19

1 उत्तर

सबसे बढ़िया उत्तर

लूप के शरीर में घोषित चर का दायरा यह बहुत ही लूप बॉडी है। जब आप लूप बॉडी में प्रवेश कर रहे होते हैं तो वे अभी तक परिभाषित नहीं होते हैं। उदा. lFile और comp का कोई मान नहीं होगा जब तक कि असाइनमेंट निष्पादित नहीं हो जाते।

यदि आप कई लूपों पर मान को संरक्षित करना चाहते हैं, तो लूप से पहले चर घोषित करें।


शब्दकोशों का उपयोग करने के लिए एक नोट। यह एक कुंजी की उपस्थिति का परीक्षण करने और TryGetValue के साथ एक बार में मूल्य प्राप्त करने के लिए अधिक कुशल है

if (lastCache.TryGetValue(file, out string lFile)) {
    // do something with lFile.
} else {
    // file is missing
}
1
Olivier Jacot-Descombes 2 जून 2019, 12:57