هل لدى FCL بالفعل استثناء فشل تنفيذ طريقة تنفيذ؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي استثناء خاص بي ، والذي تم رميه فشل التنفيذ في طريقة (P/استدعاء في حالتي).

public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }

لكني أريد استبداله بالفعل موجود بالفعل. هل يوجد في FCL شيء من هذا القبيل؟

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

المحلول

هل سيتخذ المتصل إجراءات مختلفة بناءً على ما إذا كنت ترمي PinvokeException مقابل invalidoperationexception؟ إذا كان الأمر كذلك ، ثم قم بإنشاء pinvokeexception مخصص. وإلا استخدم InvalidOperationException ورسالة خطأ واضح.

نرى كيفية تصميم التسلسلات الهرمية الاستثناء.

نصائح أخرى

لا يوجد شيء مخصص لمكالمات Pinvoke في BCL. الأقرب الموجود هو Marshal.getExceptionforhr و Marshal.GethrforLastwin32Rorr. يمكنك استخدام مزيج من هاتين وظيفتين لرمي الاستثناء المناسب عند فشل مكالمة Pinvoke.

السابق:

throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());

هناك واحد: Win32Exception.

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

إذا قمت باستدعاء طريقة نيابة عن الشخص الذي يدعو طريقتك (أو شيء يتعلق بالتفكير - ولكن MethodInfo.invoke يفعل ذلك على أي حال) ، على سبيل المثال:

public void DoIt(Action action) { action(); }

يجب عليك استخدام TargetInvocationException استثناء.

إذا لم تتمكن من التعامل مع الاستثناء ، أو إعادة صياغة ، أو تجاهله.

ماذا عن System.Runtime.InteropServices.ExternalException?

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