== Why is this an issue? When a reference parameter (keyword ``++ref++``) is used, the passed argument type must exactly match the reference parameter type. This means that to be able to pass a derived type, it must be cast and assigned to a variable of the proper type. Use of generic methods eliminates that cumbersome down casting and should therefore be preferred. This rule raises an issue when a method contains a ``++ref++`` parameter of type ``++System.Object++``. === Noncompliant code example [source,csharp] ---- using System; namespace MyLibrary { public class Foo { public void Bar(ref object o1, ref object o2) // Noncompliant { } } } ---- === Compliant solution [source,csharp] ---- using System; namespace MyLibrary { public class Foo { public void Bar(ref T ref1, ref T ref2) { } } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Make this method generic and replace the "object" parameter with a type parameter. === Highlighting Primary: Method definition Secondary: noncompliant parameter endif::env-github,rspecator-view[]