有条件属性时创建委托

时间:2013-12-17 16:00:27

标签: c# attributes delegates portable-class-library

我有一个类PCLDebug的可移植类库:

public static class PCLDebug {
    public static Action<string> LogLine { get; set; }
}

我想要做的是在外部项目中设置一次,然后能够在PCL中调用LogLine以将内容打印到VS Output窗口。这是我的尝试:

MyPCL.PCLDebug.LogLine = System.Diagnostics.Debug.WriteLine;

这里的问题是编译器抱怨,因为System.Diagnostics.Debug.WriteLine有一个条件属性Debug:

  

无法使用'System.Diagnostics.Debug.WriteLine(string)'创建委托,因为它具有条件属性

如果LogLine调用仅在调试环境中有效,我实际上很好。但是我如何让编译器满意呢?

2 个答案:

答案 0 :(得分:47)

您可以尝试将其包装在lambda函数中:

MyPCL.PCLDebug.LogLine = s => { System.Diagnostics.Debug.WriteLine( s ); };

答案 1 :(得分:4)

您也可以使用此备选表示法:

    MyPCL.PCLDebug.LogLine = delegate(string text) { System.Diagnostics.Debug.WriteLine(text); };