C #: مشكلة استدعاء المشكلة داخل مجموعة خاصية سلسلة

StackOverflow https://stackoverflow.com/questions/1676401

سؤال

لدي خاصية سلسلة تعرف اسم ملف لملف XML. عندما يقوم المستخدم بإدخال اسم الملف هذا في مكان الإطلاقة، لدي STERTER استدعاء وظيفة PARSEXML () على الفور بعد إعداد "FileName = قيمة" لملء DataTable مع البيانات من ملف XML، لذلك يعرض في المصمم. لسبب ما، عندما يكون لدي هذه الدالة الدالة في STERTER الخاصية، ينتهي STERTER الحصول على ما يسمى كل مرتين في كل مرة أقوم فيها بتغيير العقار، مع أن يكون الوقت الثاني سلسلة فارغة تسبب خطأ. لماذا تفعل هذا؟

public String FileName
{
    get { return fileName; }
    set 
    {
        fileName = value;
        parseXmlFile();
    }
}
هل كانت مفيدة؟

المحلول

إجابة قصيرة: لا ينبغي ذلك. المزيد مفيدة: ربما تسبب الدعوة الثانية نفسك؟ قم بتعيين المصحح على SETTER والمرة الثانية يطلق عليه، وفحص مكدس المكالمة.

نصائح أخرى

أعتقد أن تخمين الأولي هو أن شيئا ما في Parsexml () يدعو إلى أن STERTER مرة أخرى. ماذا يحدث إذا قمت بإزالة المكالمة إلى PARSEXML ()؟ هل حاولت تصحيح الأخطاء والتطوير من خلال التعليمات البرمجية لأنها تعمل لمعرفة ما هو بالضبط يسمي STERTER المرة الثانية؟

إذا قمت بضبط نقطة توقف filename = value; وضربها، ماذا تظهر لك نافذة Callstack؟

كإكسدة جانبا للمشكلة التي تواجهها، فإن وضع عمليات IO باهظة الثمن وراء خلف الخصائص هي الفتحة قليلا.

إذا كنت ترغب في فتح ملف وتحليل الأشياء وما إلى ذلك، فمن الأفضل أن يكون لديك طريقة منفصلة تسمى بشكل مناسب تقوم بتطبيق IO وتضع هذه الخاصية (اسم الملف) في النهاية عند اكتمال الطريقة بنجاح عملها بنجاح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top