CA1062:ValidateArgumentsOfPublicMethods على مكالمات المنشئ المشارك

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

سؤال

لدي فصل دراسي به منشئان يبدوان كما يلي:

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 أداة رائعة ولكن في بعض الأحيان عليك أن تتذكر أنها مجرد أداة ويمكنها تقديم اقتراحات لا تتناسب دائمًا مع التعليمات البرمجية الخاصة بك.

في هذا المثال، أود أن أقول تجاهل التحذير أو قم بتعطيله إذا كنت لا تريد رؤيته.

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