Esto se relaciona con la pregunta sobre return type attributes y anonymous classes, pero luego para los métodos anónimos (o lambdas), pero en la medida en que pude encontrar esta pregunta exacta no parece estar todavía en stackoverflow.Sintaxis para aplicar un atributo a un método anónimo
En el código para las entidades comerciales que generamos utilizando CodeSmith ahora tenemos [DebuggerNonUserCode]
atributos, por lo que no cuentan en los resultados de la cobertura de código. Desafortunadamente, el código generado utiliza métodos anónimos que ahora todavía aparecen en la cobertura del código con nombres como Class.<>c__DisplayClass3c
debido a la forma en que el compilador los maneja.
ejemplo de código rápido, con nombres y tipos cambiados para proteger a los inocentes, por así decirlo:
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";
});
}
¿Hay una manera de conseguir [DebuggerNonUserCode]
atributos de estos métodos para que pudiéramos deshacernos del nombre-mutilado nombres de métodos anónimos de nuestro código generado a partir de nuestros resultados de cobertura de códigos? ¿O es necesario que reescribamos el código generado para dejar de utilizar métodos anónimos?
Poner el [DebuggerNonUserCode]
en el parámetro de la definición method
SafeCall
método (antes del tipo de parámetro ReturnSomething<T>
) no se compila y tal vez no haría exactamente lo que nos gustaría si lo haría. Lo siguiente también no se compila:
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", [DebuggerNonUserCode] delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
He tratado de tener un rápido vistazo a la especificación del lenguaje CSharp, pero no han tenido suerte de encontrar una sintaxis que permitiría aplicar atributos a los métodos anónimos (o lambda) . ¿Lo extrañé, o es esto (¿actualmente?) Imposible ...?
no creo que esto obtendrá alta prioridad (si alguna vez se hace), pero he agregado la sugerencia a MS Connect en https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 489925 – peSHIr