سؤال

وأعلنت سمة XML كما XS: منطقية يمكن أن يكون مقبولا "الحقيقي"، "كاذبة"، "0" أو "1". ومع ذلك، في .NET، Boolean.Parse () لن تقبل سوى "صحيح" أو "كاذبة". إذا رأت "0" أو "1"، فإنه يلقي استثناء "سوء تنسيق".

وهكذا، بالنظر إلى أن، ما هو أفضل وسيلة لتحليل مثل هذه القيمة إلى قيمة منطقية؟

و(لسوء الحظ، أنا تقتصر على صافي الحلول 2.0، ولكن إذا تقدم V3.5 شيء، وأنا أحب أن أسمع عنه).

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

المحلول

وأعتقد أن XmlConvert لديه كل أساليب لتحويل بين شيوعا أنواع وقت تشغيل اللغة وأنواع XML. خصوصا XmlConvert.ToBoolean يعالج بالضبط القيم المنطقية (صالحة السلاسل "1" أو "صحيح" لصحيح و "0" أو "كاذبة" عن كاذبة).

نصائح أخرى

وعن طريق CBool بدلا من Boolean.Parse ينبغي أن تفعل خدعة: على الرغم من أنك سوف تضطر إلى تضمين ذلك في كتلة try/catch (والتي لن تكون هناك حاجة عند استخدام Boolean.TryParse)، فإنه سيتم تحويل بنجاح معظم القيم منطقية "معقولة"، بما في ذلك صحيح / كاذبة و0/1.

وتحرير: كما أشار في تعليق، وهذا الجواب لا طائل منه كيندا لC # المبرمجين، كما CBool هو VB-حركة التضامن الدولية. فإنه يعين Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean، وهي ليست صالحة للاستهلاك العام. مما يجعل أشارت الطبقة XMLConvert في الإجابة تقبل بديلا أفضل.

وعقم البيانات قبل محاولة تحليل ما يلي:

 string InnerText = yourXmlNode.InnerText;    
if (InnerText.Equals("0"))
    InnerText = "false";
else if (InnerText.Equals("1"))
    InnerText = "true";

وأي دخول غير <م> صحيح ، <م> كاذبة ، <م> 0 أو <م> 1 لا تزال رمي "تنسيق سيئ" استثناء (كما ينبغي).

return value === 'true' || Number(value)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top