Questo è correlato alla domanda su return type attributes e anonymous classes, ma poi per metodi anonimi (o lambda), ma fino ad ora ho potuto trovare questa domanda esatta non sembra essere ancora su StackOverflow.Sintassi per applicare un attributo ad un metodo anonimo?
Nel codice per le entità aziendali che generiamo utilizzando CodeSmith ora abbiamo gli attributi [DebuggerNonUserCode]
, quindi non contano i risultati di copertura del codice. Sfortunatamente, il codice generato utilizza metodi anonimi che ora appaiono ancora nella copertura del codice con nomi come Class.<>c__DisplayClass3c
a causa del modo in cui questi sono effettivamente gestiti dal compilatore.
esempio di codice rapido, con nomi e tipi cambiato per proteggere gli innocenti, per così dire:
public delegate T ReturnSomething<T>();
public static T SafeCall<T>(T whenNotSupported, ReturnSomething<T> method)
{
T result;
try
{
result = method();
}
catch (NotSupportedException)
{
result = whenNotSupported;
}
return result;
}
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
C'è un modo per ottenere [DebuggerNonUserCode]
attributi su questi metodi in modo che potessimo sbarazzarci del nome-mutilato nomi di metodi anonimi dal nostro codice generato dai nostri risultati di copertura del codice? O dobbiamo riscrivere quel codice generato per non usare più metodi anonimi?
Mettere il [DebuggerNonUserCode]
sul parametro method
della definizione SafeCall
metodo (prima del tipo ReturnSomething<T>
parametri) non compilare e forse non avrebbe fatto esattamente ciò che vorremmo se sarebbe. Di seguito, inoltre, non compilare:
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", [DebuggerNonUserCode] delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
ho cercato di avere un rapido sguardo alla CSharp Language Specification, ma non hanno avuto fortuna a trovare una sintassi che consentirebbe l'applicazione di attributi per i metodi anonimi (o lambda) . Mi è mancato, o è questo (al momento?) Impossibile ...?
Non credo che questo otterrà la massima priorità (se mai verrà eseguita), ma ho aggiunto il suggerimento a MS Connect all'indirizzo https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 489925 – peSHIr