سؤال

في VB.NET أنا غالبا ما Catch…When:

Try
    …
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
    …
End Try

هل هناك C # يعادل Catch…When؟

وأنا لا أريد أن اللجوء إلى استخدام بيان if داخل catch إن أمكن.

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

المحلول

وأعلن هذه الوظيفة لC # 6. ومن الممكن الآن لكتابة

try { … }
catch (MyException e) when (myfilter(e))
{
    …
}

ويمكنك تنزيل معاينة البصرية ستوديو 2015 الآن للتحقق من ذلك، أو تنتظر الافراج عن مسؤول.

نصائح أخرى

وليس هناك ما يعادل Catch…When في C #. سيكون لديك حقا أن تلجأ إلى بيان if داخل catch الخاص بك، ثم rethrow إذا لم يتم الوفاء حالتك:

try
{
    …
}
catch (ArgumentNullException e)
{
    if ("SAMPLES" == e.ParamName.ToUpper())
    {
        … // handle exception
    }
    else
    {
        throw;  // condition not fulfilled, let someone else handle the exception
    } 
}

وهذا لن إعادة نفس الدلالات مثل الصيد VB عندما التعبير. هناك فرق واحد. وVB عند تنفيذ التعبير قبل حدوث استرخاء المكدس. لو كنت لفحص كومة عند نقطة وعند تصفية، هل ترى في الواقع الإطار حيث تم طرح استثناء.

وبعد ان اذا كان في كتلة التقاط مختلف لأن كتلة التقاط ينفذ بعد المساس بها المكدس. وهذا أمر مهم خصوصا عندما يتعلق الأمر خطأ التقارير. في السيناريو VB لديك القدرة على تحطمها مع تتبع مكدس بما في ذلك الفشل. ليس من الممكن للحصول على هذا السلوك في C #.

وتحرير:

بلوق مفصلة آخر على هذا الموضوع.

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