CA1062:ValidateArgumentsOfPublicMethods على مكالمات المنشئ المشارك
-
21-08-2019 - |
سؤال
لدي فصل دراسي به منشئان يبدوان كما يلي:
public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
عندما أقوم بتشغيل FxCop، فإنه يقوم بالإبلاغ بشكل صحيح عن حدوث انتهاك CA1062:التحقق من صحة الوسائط من الأساليب العامة, ، لأنه إذا source
يكون null
في المنشئ الأول، سوف يرمي NullReferenceException
على source.Name
.
هل هناك أي طريقة لإصلاح هذا التحذير؟
يمكنني إنشاء طريقة ملحقة تتحقق من القيمة الخالية وتعيد الوسيطة الخاصة بها، ولكنها ستكون قبيحة.كما أفهم أيضًا، لن يحل هذا التحذير لأن FxCop لن يدرك ما يفعله.
المحلول
مثله؟
public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
نصائح أخرى
هناك أوقات مشروعة لإيقاف تشغيل تحذيرات FxCop وقد يكون هذا واحدًا جدًا، ولكن يمكنك تصحيح المشكلة إما عن طريق تعبير ثلاثي يتحقق من وجود قيمة فارغة ويطرح استثناءً (أو يستبدل قيمة افتراضية)، أو استدعاء قيمة ثابتة الطريقة التي تتحقق من وجود قيمة فارغة وتطرح الاستثناء المناسب.
نظرًا لأنه تم طرح هذا السؤال منذ بعض الوقت، أريد فقط أن أشير إلى الميزات الأحدث في C#، يمكنك الآن أيضًا استخدام هذا:
public MyClass(SomeOtherClass source) : this(source, source?.Name) { }
أود أن أقول إن الطريقة الوحيدة لإصلاح هذا التحذير هي إيقاف تشغيله.تعد FxCop أداة رائعة ولكن في بعض الأحيان عليك أن تتذكر أنها مجرد أداة ويمكنها تقديم اقتراحات لا تتناسب دائمًا مع التعليمات البرمجية الخاصة بك.
في هذا المثال، أود أن أقول تجاهل التحذير أو قم بتعطيله إذا كنت لا تريد رؤيته.