对调用Conditional
方法的代码运行代码分析(Visual Studio 2015)会导致对未使用的本地(CA1804)或未使用的参数(CA1801)发出警告。例如。为:
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
[Conditional ("NEVER_DEFINED")]
static void Log(string message)
{
System.Console.WriteLine("Demo conditional message logging: " + message);
}
static void Main(string[] args)
{
string message = "Only log this when `NEVER_DEFINE` is #defined";
Log(message);
Method("other message");
}
static void Method(string messageToLog)
{
Log(messageToLog);
}
}
}
代码分析导致:
警告CA1801
参数' args' ' Program.Main(string [])'从未使用过。删除参数或在方法体中使用它。
ConsoleApplication1 ... \ Program.cs 14
警告CA1804
' Program.Main(串[])'声明一个类型为' string'的变量' message,它从未被使用或仅被分配给。使用此变量或将其删除。
ConsoleApplication1 ... \ Program.cs 15
警告CA1801
参数' messageToLog' ' Program.Method(string)'从未使用过。删除参数或在方法体中使用它。
ConsoleApplication1 ... \ Program.cs 22
我认为有关message
和messageTolog
的警告是误报。有没有办法让代码分析将条件方法视为使用参数?
答案 0 :(得分:1)
您可以使用[SuppressMessageAttribute]
中的System.Diagnostics.CodeAnalysis
。但是,您必须将它应用于调用Conditional
- 方法的每个方法(或在更广泛的范围内应用它); e.g:
[System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1804")]
static void Main(…)
{
…
}
[System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1801")]
static void Method(…)
{
…
}
答案 1 :(得分:1)
将CODE_ANALYSIS
条件属性添加到被调用的条件方法,例如:
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
[Conditional ("NEVER_DEFINED")]
[Conditional ("CODE_ANALYSIS")]
static void Log(string message)
{
System.Console.WriteLine("Demo conditional message logging: " + message);
}
static void Main(string[] args)
{
string message = "Only log this when `NEVER_DEFINE` is #defined";
Log(message);
Method("other message");
}
static void Method(string messageToLog)
{
Log(messageToLog);
}
}
}
现在考虑Log(string)
使用其参数,并且也考虑使用提供给它的所有参数和局部变量。