Wie protokolliere ich einen Prädikatausdruck?

8

Normalerweise haben meine Repositories Logging-Anweisungen für Debugging-Zwecke, so dass ich Werte von Parametern sehen kann. Kürzlich ging ich den Weg der Erstellung eines generischen Repositories, das Prädikat Ausdruck als Argument für große Flexibilität nehmen, aber ich kann nicht eine vernünftige Möglichkeit zur Protokollierung der Bedingung, wo es entfernt nützlich sein würde.

Beispielmethode:

%Vor%

Sie können sehen, dass ich an dieser Stelle Body.ToString () verwende, aber die Ergebnisse sind nicht so gut lesbar:

Parameters [predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId)]

Was ich am Ende gerne sehen würde, ist etwas Ähnliches wie das Folgende:

Parameters [predicate: (fa.SomeId == 1 && fa.Account.Name == "MyName").SomeId)]

Im Wesentlichen ist der Wert dieses Protokolls in der Lage, die Eingabewerte zu kennen, wenn etwas explodiert. Gibt es eine Möglichkeit, den Benutzer der API dazu zu zwingen, das Prädikat als String anzugeben?

    
e36M3 03.03.2011, 17:32
quelle

2 Antworten

5

Dieser Blogpost von Matt Warren enthält Code, der eine lokale Variablenreferenz durch den Variablennamen ersetzt. Statt predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId) erhalten Sie predicate: (fa.SomeId == someValue) .

Der Blogpost:

Ссылка

Die Quelle:

%Vor%     
smartcaveman 03.03.2011, 18:21
quelle
0

Ich hatte dieses Problem einmal und löste es, indem ich eine Aufzählung für alle Prädikate erstellte, die möglicherweise protokolliert werden konnten, die in meinem Fall nicht so viele waren. Wenn dies in Ihrem Fall nicht der Fall ist, erstellen Sie nur einen Enum-Eintrag pro Prädikat und ein Dictionary<Predicate<T>, YourEnum> und protokollieren Sie den Wert des Enums anstelle des Prädikats.

    
JBSnorro 03.03.2011 17:58
quelle