我有一个可移植类库,其中包含一个名为PCLDebug
的类:
public static class PCLDebug {
public static Action<string> LogLine { get; set; }
}
我想要做的是在外部项目中设置一次,然后能够在PCL中调用LogLine
来将东西打印到VS输出窗口。以下是我的尝试:
MyPCL.PCLDebug.LogLine = System.Diagnostics.Debug.WriteLine;
问题在于编译器抱怨,因为System.Diagnostics.Debug.WriteLine有一个Debug条件属性:
无法创建具有“System.Diagnostics.Debug.WriteLine(string)”的委托,因为它具有条件属性
如果LogLine
调用仅在调试环境中起作用,我其实可以接受。但是我该如何让编译器满意呢?
ConditionalAttribute
会导致编译器省略对函数的调用,但直接赋值不是调用,实际上它是委托构造,所以不能被省略。使用lambda表达式可以工作,因为它创建了一个匿名函数,该函数要么不执行任何操作,要么调用条件函数。在任何情况下,委托都会被明确分配。 - Kyle