القيم الافتراضية للخاصية باستخدام Properties.Settings.Default

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أستخدم .Net 2 والطريقة العادية لتخزين إعداداتي.أقوم بتخزين كائني المخصص المتسلسل إلى XML.أحاول استرداد القيمة الافتراضية للخاصية (ولكن بدون إعادة تعيين الخصائص الأخرى).أنا أستعمل:

ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;

ولكن يبدو أنه يُرجع سلسلة بدلاً من ValuationInput ويطرح استثناءً.

لقد قمت باختراق سريع، وهو يعمل بشكل جيد:

string valuationInputStr = (string) 
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));

لكن هذا أمر قبيح حقًا - عندما أستخدم كل الأدوات لتحديد إعداد مكتوب بقوة، لا أريد إجراء تسلسل للقيمة الافتراضية بنفسي، أود قراءتها بنفس الطريقة التي أقرأ بها القيمة الحالية: ValuationInput valuationInput = Settings.Default.ValuationInput;

هل كانت مفيدة؟

المحلول

في مرحلة ما، سيتعين على شيء ما، في مكان ما، استخدام إلغاء تسلسل Xml، سواء كان أنت أو برنامج تضمين داخل فئة الإعدادات.يمكنك دائمًا تجريدها بطريقة لإزالة الكود "القبيح" من منطق عملك.

public static T FromXml<T>(string xml)
{
    XmlSerializer xmlser = new XmlSerializer(typeof(T));
    using (System.IO.StringReader sr = new System.IO.StringReader(xml))
    {
        return (T)xmlser.Deserialize(sr);
    }
}

http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx

نصائح أخرى

@جرزينيو،

لماذا لا تستخدم نوع الكائن الخاص بك مباشرة؟يمكنك ضبط نوع الإعداد الخاص بك على خصائص المشروع->علامة التبويب الإعدادات.يمكنك تحديد النوع الخاص بك عن طريق النقر على "استعراض" في القائمة المنسدلة لعمود "النوع".

الاقتباس من MSDN:

يمكن تخزين إعدادات التطبيق كأي نوع بيانات قابل للتسلسل أو يحتوي على typeconverter الذي ينفذ tostring/fromstring

بهذه الطريقة يمكنك الحصول على إعدادات مكتوبة بقوة، على سبيل المثال.(ValuationInput) الإعدادات.Default.Properties["ValuationInput"].DefaultValue;سيعود كائنًا بدلاً من السلسلة.

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