2015-04-21 7 views
1

У меня есть следующие:Почему FxCop дает мне предупреждение «DoNotCastUnnecessarily»?

Option Strict On 
Public NotInheritable Class Root 
    Public Overrides Function Equals(obj As Object) As Boolean 
     If TypeOf obj Is Root Then 
      Dim rt As Root = DirectCast(obj, Root) 
      Return rt.container.Equals(Me.container) AndAlso 
       rt.question.Equals(Me.question) 
     End If 
     Return False 
    End Function 
End Class 

И FxCop дает мне это предупреждение:

Warning, Certainty 95, for DoNotCastUnnecessarily 
{ 
    Target  : #Equals(System.Object) (IntrospectionTargetMember) 
    Location  : file:///C:/..../Root.vb<46> (String) 
    Resolution : "'obj', a parameter, is cast to type 'Root' multiple 
        times in method 'Root.Equals(Object)'. Cache the result 
        of the 'as' operator or direct cast in order to eliminate 
        the redundant castclass instruction." 
    Help   : http://msdn2.microsoft.com/library/ms182271(VS.90).aspx (String) 
    Category  : Microsoft.Performance (String) 
    CheckId  : CA1800 (String) 
    RuleFile  : Performance Rules (String) 
    Info   : "Avoid duplicate casts where possible, since there is 
        a cost associated with them." 
    Created  : 4/21/2015 8:45:17 PM (DateTime) 
    LastSeen  : 4/21/2015 8:55:16 PM (DateTime) 
    Status  : Active (MessageStatus) 
    Fix Category : NonBreaking (FixCategories) 
} 

Что я делаю неправильно? Я проверяю тип и отбрасываю, если это то же самое.

ответ

6

Потому что вы можете переписать свой бросок в

Dim rt As String = TryCast(obj, Root) 
If Not (rt is Nohting) Then 

Который является более производительным, чем комбинация is и DirectCast

3

язык используется, как представляется, с учетом C#, но это в основном просит вас использовать TryCast вместо Is

Dim rt As Root = TryCast(obj, Root) 
    If Not (rt Is Nothing) Then 
     ' code 
    End If 

причина в том, что это внутренне ре в любом случае, эквивалент TryCast, поэтому усилие дублируется.

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

  • Нет связанных вопросов^_^