2009-06-09 4 views
170

Я использую атрибут Obsolete (как это было предложено другими программистами), чтобы показать предупреждение, если используется определенный метод.C# - выборочно подавлять пользовательские устаревшие предупреждения

Есть ли способ подавить предупреждение, подобное CodeAnalysis 'SuppressMessage в точках, где использование оправдано?

Спасибо!

EDIT

Это для [Obsolete("Some message")] как мне нужно, чтобы включить некоторые подробности о предупреждении. Однако #pragma warning disable 612 больше не работает, когда я добавить сообщение для невооруженного атрибута [Obsolete] ...

EDIT 2

Найдены правильное число предупреждения - Это , если у вас есть сообщение следующего устаревший атрибут.

Так делать то, что я хочу сделать:

#pragma warning disable 618

, а затем после вызова

#pragma warning restore 618

Благодаря Jared Par и Джон Скит указал мне в правильном направлении !

ответ

208

Используйте #pragma warning disable:

using System; 

class Test 
{ 
    [Obsolete("Message")] 
    static void Foo(string x) 
    { 
    } 

    static void Main(string[] args) 
    { 
#pragma warning disable 0618 
     // This one is okay 
     Foo("Good"); 
#pragma warning restore 0618 

     // This call is bad 
     Foo("Bad"); 
    } 
} 

Восстановить предупреждение впоследствии, так что вы не пропустите «плохие» звонки.

+1

Это работает только в том случае, если я не передаю сообщение с моим атрибутом Obsolete. У меня есть сообщение, хотя вот так: [Устаревший («Вот почему это не должно использоваться - вместо этого используйте XYZ.»)]. Как только я помещаю сообщение, предупреждение pragma disable 612 перестает работать, и я получаю предупреждения независимо. Возможно, мне нужен другой идентификатор ошибки? – Alex

+1

Найдено - правильный номер предупреждения - 618, если в атрибуте Obsolete есть сообщение. Спасибо! – Alex

+1

Goodo - Я скорректировал свой пример, чтобы соответствовать этому. –

8

Вы ищете #pragma предупреждения отключить директиву

По существу вы добавляете следующую команду выше места вызова в файле .cs.

#pragma warning disable 612 
SomeMethodCall 

612 является сообщение об ошибке ID для вызова устаревших методов

+0

Это работает только если я не даю сообщение с моим Устаревшим атрибутом. У меня есть сообщение, хотя вот так: [Устаревший («Вот почему это не должно использоваться - вместо этого используйте XYZ.»)]. Как только я помещаю сообщение, предупреждение pragma disable 612 перестает работать, и я получаю предупреждения независимо. Возможно, мне нужен другой идентификатор ошибки? – Alex

+2

Найдено - правильный номер предупреждения - 618, если в атрибуте Obsolete есть сообщение. – Alex

96

The намерения является отключить предупреждение для устаревших использования, независимо от того, является ли конструкция, отмеченные [Obsolete] или [Obsolete("Message")]. Так как использовать CS0612иCS0618:

#pragma warning disable 612, 618 

... 

#pragma warning restore 612, 618 
+1

Спасибо. Это помогло :) – sandyiscool

+2

+1 для упоминания как 612, так и 618. –

+2

Также обратите внимание, что предупреждения не возникают, если устаревшее использование относится к классу, который сам по себе является устаревшим. – redcalx

15

Вот , как получить номер предупреждения/ошибки в первую очередь:

  1. Rebuild ваш проект.
  2. Перейти на страницу Output окно.
  3. Посмотрите на строку предупреждения/ошибки, которую вы хотите подавить.
    Например:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. Скопируйте номер детали после "CS".
  5. Далее следует, как Jon Skeet says.

(Лучше всегда действовать Jon Skeet говорит ...)

Смежные вопросы