سؤال

ما هو الفرق بين تحليل() و TryParse()?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

هناك بعض شكل من تدقيق الأخطاء مثل محاولة اللحاق بلوك ؟

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

المحلول

وParse يطرح استثناء إذا كان لا يمكن تحليل القيمة، في حين TryParse إرجاع bool تشير إلى ما إذا نجحت.

وTryParse لا مجرد try / catch داخليا - بيت القصيد من ذلك هو أن يتم تنفيذ ذلك من دون استثناءات بحيث يكون سريع. في الواقع الطريقة التي يتم على الأرجح تنفيذه هي التي داخليا طريقة Parse سيدعو TryParse ثم رمي استثناء إذا كان يعود false.

في وباختصار يمكن القول، استخدم Parse إذا كنت متأكدا من قيمة صالحة. على خلاف ذلك استخدام TryParse.

نصائح أخرى

إذا كانت السلسلة لا يمكن تحويلها إلى عدد صحيح ثم

  • int.Parse() سوف رمي استثناء
  • int.TryParse() سوف return false (ولكن لا رمي استثناء)

وطريقة TryParse يسمح لك لاختبار ما إذا كان هناك شيئا parseable. إذا حاولت تحليل كما هو الحال في المقام الأول مع عدد صحيح غير صالح، وستحصل على استثناء بينما في TryParse، تقوم بإرجاع منطقية مما يتيح لك معرفة ما إذا كان تحليل نجح أم لا.

وكحاشية، ويمر في لاغية لمعظم وسائل TryParse سوف بطرح استثناء.

TryParse واستثناء الضرائب

وتحليل يطرح استثناء إذا فشل التحويل من السلسلة إلى نوع بيانات محددة، في حين يتجنب TryParse صراحة رمي استثناء.

وTryParse لا إرجاع القيمة، تقوم بإرجاع رمز الحالة لبيان ما إذا كان تحليل نجحت (ولا رمي استثناء).

لسجل، أنا اختبار اثنين من رموز: هذا مجرد محاولة لتحويل من سلسلة إلى عدد وإذا فشل ثم تعيين العدد إلى الصفر

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

وو:

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

لج #، فإن أفضل خيار هو استخدام tryparse بسبب محاولة والبديل اقبض طرح استثناء

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

وهذا هو مؤلم بطيء وغير مرغوب فيه، ومع ذلك، لا يتوقف رمز ما لم تتم تسوية استثناء التصحيح لوقف معها.

وأنا أعلم به وظيفة قديمة جدا ولكن التفكير في تقاسم بعض مزيد من التفاصيل حول تحليل مباراة TryParse.

وكان سيناريو حيث يحتاج التاريخ والوقت يمكن تحويلها إلى سلسلة وإذا DATEVALUE خالية أو string.empty كنا نواجه استثناء. ومن أجل التغلب على هذا، ونحن قد حلت محل تحليل مع TryParse وسوف تحصل التاريخ الافتراضي.

وقديم الرمز:

dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");

وكود جديد:

DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);

ويجب أن يعلن متغير آخر، وتستخدم خارج لTryParse.

وdouble.Parse ( "-")؛ يثير استثناء، في حين double.TryParse ( "-"، تحليل الخروج). يوزع 0 لذا أعتقد TryParse يفعل التحويلات أكثر تعقيدا.

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