== Why is this an issue? A method using the ``++VarArgs++`` calling convention is not Common Language Specification (CLS) compliant and might not be accessible across programming languages, while the ``++params++`` keyword works the same way and is CLS compliant. This rule raises an issue when a ``++public++`` or ``++protected++`` type contains a ``++public++`` or ``++protected++`` method that uses the ``++VarArgs++`` calling convention. === Noncompliant code example [source,csharp] ---- using System; namespace MyLibrary { public class Foo { public void Bar(__arglist) // Noncompliant { ArgIterator argumentIterator = new ArgIterator(__arglist); for(int i = 0; i < argumentIterator.GetRemainingCount(); i++) { Console.WriteLine( __refvalue(argumentIterator.GetNextArg(), string)); } } } } ---- === Compliant solution [source,csharp] ---- using System; [assembly: CLSCompliant(true)] namespace MyLibrary { public class Foo { public void Bar(params string[] wordList) { for(int i = 0; i < wordList.Length; i++) { Console.WriteLine(wordList[i]); } } } } ---- === Exceptions Interop methods using ``++VarArgs++`` calling convention do not raise an issue. [source,csharp] ---- [DllImport("msvcrt40.dll")] public static extern int printf(string format, __arglist); // Compliant ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Use the "params" keyword instead of "__arglist". === Highlighting Method declaration endif::env-github,rspecator-view[]