在我的.Net 4.7.2 MVC5 web应用程序中,我试图使用以下代码声明一个表达式:
Expression<Action> expresssion = () => Debug.WriteLine("Easy!");
该行不编译,并且仅当当前配置不具有"0"时才给出以下错误;定义DEBUG常量";检查值:
错误CS0765只有定义声明或删除的条件方法不能在表达式树中使用
当我转到项目的属性页并检查Define DEBUG Constant时,Intellisense不仅消除了错误,而且按预期构建和工作。
这个值应该是表达式工作所必需的吗?
背景信息:
- 我可以选中和取消选中DEBUG常量值,错误就会消失/出现
- 我使用的是VS 2019企业版
Debug.WriteLine
方法具有Conditional
属性。
[Conditional("DEBUG")]
public static void WriteLine(string? message)
文件提供了一条线索。。。
//
// Summary:
// Indicates to compilers that a method call or attribute should be ignored unless
// a specified conditional compilation symbol is defined.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute
如果没有定义DEBUG符号,则WriteLine(string)
方法将是"DEBUG";忽略";因此表达式是"0";"不完整";,或者好像它从未被正确分配过,从而导致了错误。
要解决此问题,请将Debug.WriteLine
语句放在另一个命名函数中,并在表达式中使用该函数。
Expression<Action> expresssion = () => WriteDebug("Easy!");
....
private static void WriteDebug(string str)
{
Debug.WriteLine(str);
}