2013-12-17 14 views
24

があった場合、私はクラスPCLDebugでポータブルクラスライブラリを持つデリゲートを作成します。は条件属性

呼び出すことができ、その後、外側のプロジェクトに一度物事を設定されている私は何をしたい
public static class PCLDebug { 
    public static Action<string> LogLine { get; set; } 
} 

LogLine PCL内のものをVS出力ウィンドウに印刷します。ここに私の試みです:

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

ここでの問題System.Diagnostics.Debug.WriteLineデバッグの条件属性を持っているので、コンパイラは、文句ということです:

「たSystem.Diagnosticsとデリゲートを作成することはできませんそれは条件付き属性

を持っているのでLogLine呼び出しはデバッグのみの環境で動作するかどうか.Debug.WriteLine(文字列)は、」私はそれで実際に元気です。しかし、私はどのようにコンパイラを幸せに保ちますか?

答えて

41

あなたはラムダ関数でラップ試みることができる:

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

働いていました。ありがとう! – realPT

+0

これは機能しますが、直接割り当てることができないのはなぜですか? – reggaeguitar

+4

@reggaeguitar 'ConditionalAttribute'はコンパイラに関数の呼び出しを省略させますが、直接代入は呼び出しではないため、実際には構築を委任して省略することはできません。ラムダは何もしないか、条件付き関数を呼び出す無名関数を作成するため動作します。どちらの場合でも、代理人は確実に割り当てられます。 – Kyle

3

あなたはあまりにもユーザーこの代替表記をすることができます:これは私のために

MyPCL.PCLDebug.LogLine = delegate(string text) { System.Diagnostics.Debug.WriteLine(text); }; 
関連する問題