FXCop подавляет предупреждение CA1800 (ненужные приведения) - PullRequest
3 голосов
/ 19 августа 2010

У меня есть следующий код:

[SuppressMessage( "Microsoft.Performance", "CA1800:DoNotCastUnnecessarily" )]
private static void SetTestConnectionString( Component table )
{
    if( table is Object1 )
    {
        fn1( (Object1)table );
    }
    // ... a few more if statements for different Classes
}

Однако, когда я запускаю FxCop для этого класса / функции, он все равно генерирует предупреждение

предупреждение: CA1800: Microsoft.Performance: «таблица», параметр, есть приведение к типу "xxx" несколько раз в методе 'Ccc.SetTestConnectionString (Компонент)'. Кэшировать результат «как» оператор или прямое приведение, чтобы устранить избыточный приведенный класс инструкция.

Я знаю, что мог бы реорганизовать этот код для удаления предупреждения, однако это сделало бы код менее читабельным В этом случае я хотел бы подавить одно сообщение об этой функции.

Что я делаю не так?

Ответы [ 3 ]

5 голосов
/ 19 августа 2010

Убедитесь, что вы определили символ препроцессора CODE_ANALYSIS в свойствах вашего проекта.

Посмотрите на: http://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.suppressmessageattribute.aspx

0 голосов
/ 11 августа 2017

Я подозреваю, что файл вашего проекта содержит DebugType none. Если для параметра DebugType задано значение none, он не обнаружит подавляющий код. Таким образом, вы можете изменить DebugType на full, потому что он правильно обнаружит подавляющий код.

<DebugType>full</DebugType>
0 голосов
/ 20 февраля 2011
private static void SetTestConnectionString( Component table )
{
    if( table.GetType() == typeof(Object1) )
    {
        Object1 object1 = (Object1)table;
        fn1( object1 );
    }
    // ... a few more if statements for different Classes
}
...