﻿<?xml version="1.0" encoding="utf-8"?><Type Name="AvoidRepetitiveCastsRule" FullName="Gendarme.Rules.Performance.AvoidRepetitiveCastsRule"><TypeSignature Language="C#" Value="public class AvoidRepetitiveCastsRule : Gendarme.Framework.Rule, Gendarme.Framework.IMethodRule" /><TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit AvoidRepetitiveCastsRule extends Gendarme.Framework.Rule implements class Gendarme.Framework.IMethodRule, class Gendarme.Framework.IRule" /><AssemblyInfo><AssemblyName>Gendarme.Rules.Performance</AssemblyName><AssemblyVersion>4.2.0.0</AssemblyVersion></AssemblyInfo><Base><BaseTypeName>Gendarme.Framework.Rule</BaseTypeName></Base><Interfaces><Interface><InterfaceName>Gendarme.Framework.IMethodRule</InterfaceName></Interface></Interfaces><Attributes><Attribute><AttributeName>Gendarme.Framework.EngineDependency(typeof(Gendarme.Framework.Engines.OpCodeEngine))</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.FxCopCompatibility("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.Problem("The method seems to repeat the same cast operation multiple times.")</AttributeName></Attribute><Attribute><AttributeName>Gendarme.Framework.Solution("Change the logic to ensure the (somewhat expensive) cast is done once.")</AttributeName></Attribute></Attributes><Docs><summary>
             This rule fires if multiple casts are done on the same value, for the same type.
             Casts are expensive so reducing them, by changing the logic or caching the 
             result, can help performance.
             </summary><remarks>This rule is available since Gendarme 2.0</remarks><example>
             Bad example:
             <code>
             foreach (object o in list) {
            	// first cast (is)
            	if (o is ICollection) {
            		// second cast (as) if item implements ICollection
            		Process (o as ICollection);
            	}
             }
             </code></example><example>
             Good example:
             <code>
             foreach (object o in list) {
            	// a single cast (as) per item
            	ICollection c = (o as ICollection);
            	if (c != null) {
            		SingleCast (c);
            	}
             }
             </code></example><example>
             Bad example:
             <code>
            	// first cast (is):
            	if (o is IDictionary) {
            		// second cast if item implements IDictionary:
            		Process ((IDictionary) o);
            	// first cast (is):
            	} else if (o is ICollection) {
            		// second cast if item implements ICollection:
            		Process ((ICollection) o);
            	}
             </code></example><example>
             Good example:
             <code>
            	// a single cast (as) per item
            	IDictionary dict;
            	ICollection col;
            	if ((dict = o as IDictionary) != null) {
            		SingleCast (dict);
            	} else if ((col = o as ICollection) != null) {
            		SingleCast (col);
            	}
             </code></example></Docs><Members><Member MemberName=".ctor"><MemberSignature Language="C#" Value="public AvoidRepetitiveCastsRule ();" /><MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" /><MemberType>Constructor</MemberType><AssemblyInfo><AssemblyVersion>4.2.0.0</AssemblyVersion></AssemblyInfo><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName="CheckMethod"><MemberSignature Language="C#" Value="public Gendarme.Framework.RuleResult CheckMethod (Mono.Cecil.MethodDefinition method);" /><MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Gendarme.Framework.RuleResult CheckMethod(class Mono.Cecil.MethodDefinition method) cil managed" /><MemberType>Method</MemberType><AssemblyInfo><AssemblyVersion>4.2.0.0</AssemblyVersion></AssemblyInfo><ReturnValue><ReturnType>Gendarme.Framework.RuleResult</ReturnType></ReturnValue><Parameters><Parameter Name="method" Type="Mono.Cecil.MethodDefinition" /></Parameters><Docs><param name="method">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs></Member></Members></Type>