Jest to związane z pytaniem o return type attributes i anonymous classes, ale w przypadku anonimowych metod (lub lambdas), ale o ile mogę znaleźć to dokładne pytanie nie wydaje się jeszcze na stackoverflow.Składnia dla zastosowania atrybutu do anonimowej metody?
W kodzie dla podmiotów gospodarczych, które generujemy za pomocą CodeSmith mamy teraz atrybuty [DebuggerNonUserCode]
, więc nie liczą się w wynikach zasięgu kodu. Niestety, wygenerowany kod wykorzystuje anonimowe metody, które są nadal wyświetlane w pokryciu kodu o nazwach takich jak Class.<>c__DisplayClass3c
ze względu na sposób, w jaki są one obsługiwane przez kompilator.
Krótki przykład kodu, o nazwach i typach zmienione w celu ochrony niewinnych, że tak powiem:
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";
});
}
Czy istnieje sposób, aby uzyskać [DebuggerNonUserCode]
atrybuty dotyczące tych metod, więc możemy pozbyć się z nazwy-zniekształcone anonimowe nazwy metod z naszego wygenerowanego kodu z naszych wyników pokrycia kodu? Czy musimy przepisać wygenerowany kod, aby nie używać już metod anonimowych?
Umieszczenie [DebuggerNonUserCode]
od parametru definicji SafeCall
metody (przed typu ReturnSomething<T>
parametrów) nie skompilować method
a może nie zrobi dokładnie to, co chcielibyśmy, jeśli to zrobi. Dodaje również nie kompiluje:
public static void CodeExample()
{
string foo = SafeCall<string>("OOPS!", [DebuggerNonUserCode] delegate
{
//throw new NotSupportedException();
return "Ok";
});
}
Próbowałem rzucić okiem na CSharp specyfikacji języka, ale nie miał szczęścia znalezienia składni, który pozwoliłby stosowania atrybutów do metod anonimowych (lub lambda) . Czy tęskniłem za tym, czy jest to (obecnie?) Niemożliwe ...?
nie sądzę otrzyma wysoki priorytet (jeśli kiedykolwiek zostanie zrobione), ale dodałem sugestię do MS Connect na https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 489925 – peSHIr