Reputation: 5661
I have the following :
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
And FxCop is giving me this warning:
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)
}
What am I doing wrong? I check the type, and cast if it is the same.
Upvotes: 1
Views: 165
Reputation: 86064
The language being used seems to be tailored to C#, but it's basically asking you to use TryCast
instead of Is
Dim rt As Root = TryCast(obj, Root)
If Not (rt Is Nothing) Then
' code
End If
The reason is that this internally performs the equivalent of a TryCast
anyway, so effort is duplicated.
Upvotes: 3
Reputation: 8941
Because you can rewrite your cast to
Dim rt As String = TryCast(obj, Root)
If Not (rt is Nohting) Then
Which is more performant than a combination of is
and DirectCast
Upvotes: 6