كيف أتخلص من "بعض الأحداث] لا تستخدم أبدا" تحذيرات مترجم في Visual Studio؟

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

سؤال

على سبيل المثال، أحصل على تحذير مترجم هذا،

الحدث "company.somecontrol.searchclick" لا يستخدم أبدا.

لكنني أعرف أنه يستخدم لأن التعليق عليه يلقي بي مثل 20 تحذيرات جديدة من صفحات XAML التي تحاول استخدام هذا الحدث!

ما يعطي؟ هل هناك خدعة للتخلص من هذا التحذير؟

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

المحلول

ويبدو أن هذا تحذير 67. وبالتالي يمكن قمعها مع:

#pragma warning disable 67

لا تنسى استعادة ذلك في أقرب وقت ممكن (بعد إعلان الحدث) مع:

#pragma warning restore 67

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

هناك ايضا مقال مثير للاهتمام حول هذا التحذير وتحديدا كيف ينطبق على الواجهات؛ هناك اقتراح جيد حول كيفية التعامل مع الأحداث "غير المستخدمة". لسوء الحظ، يبدو أن هذا الرابط (مؤقتا؟) الموتى الآن، لكن الأجزاء المهمة هي:

الإجابة الصحيحة هي أن تكون واضحة حول ما تتوقعه من الحدث، والتي في هذه الحالة، لا شيء:

public event EventHandler Unimportant
{
    add { }
    remove { }
}

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

public event EventHandler Unsupported
{
    add { throw new NotSupportedException(); }
    remove { }
}

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

نصائح أخرى

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

public event EventHandler CanExecuteChanged { add{} remove{} }

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

public event RoutedEventHandler SearchClick
{
    add { throw new NotSupportedException(); }
    remove { }
}

كما البديل على هذا يمكنك أيضا ترك add و remove الأساليب الفارغة على تجاهل اشتراكات بصمت في الحدث.

أفضل حل هو إعادة تكوين التعليمات البرمجية ربما سحب إعلان الحدث إلى المنفذ إذا كان ذلك ممكنا.

كحل أخير، يمكنك أيضا تعطيل التحذير مثل

#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67

يمكنك أيضا القيام بما يلي:

public event EventHandler MyEvent = delegate {}

يبدو أن المحول البرمجي غير مدرك أنه يتم استخدامه في رمز XAML. حاول قمع التحذير في تعريف الحدث الخاص بك.

أيضا، تأكد من أنك ترفع بالفعل الحدث في مكان ما.

يمكنك تقليص التحذيرات الفردية.

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

في هذه الحالة، CS0219 هو التحذير فيما يتعلق بالمتغيرات التي يتم تعيينها ولكنها غير المستخدمة. يمكنك إما استخدام علامة / Nownarn: 0219، أو إضافة رقم الخطأ في جزء الخصائص للمشروع (ضمن "بناء"، تذكر إزالة CS الرائد). ضع في اعتبارك السكرات الكل تحذيرات من هذه الفئة.

أو يمكنك إضافة <NoWarn>67</NoWarn> إلى مشروعك

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top