Zwracanie wartości metody z wnętrza instrukcji using, która pobiera DataContext, wydaje się zawsze działać dobrze , na przykład:
public static Transaction GetMostRecentTransaction(int singleId)
{
using (var db = new DataClasses1DataContext())
{
var transaction = (from t in db.Transactions
orderby t.WhenCreated descending
where t.Id == singleId
select t).SingleOrDefault();
return transaction;
}
}
Ale zawsze czuję, że powinienem coś zamknąć, zanim wyrwę się z używania nawiasów, np. Definiując transakcję przed instrukcją using, wpisując jej wartość w nawiasach, a potem wracając po nawiasach.
Czy zdefiniowanie i zwrócenie zmiennej poza nawiasami używanymi byłoby lepszą praktyką lub w jakikolwiek sposób oszczędziłoby zasoby?
Odpowiedzi:
Nie, myślę, że w ten sposób jest to jaśniejsze. Nie martw się,
Dispose
nadal będzie nazywany „w drodze” - i dopiero po całkowitym oszacowaniu wartości zwracanej. Jeśli wyjątek zostanie zgłoszony w dowolnym momencie (w tym ocena wartości zwracanej)Dispose
, nadal będzie wywoływany.Chociaż z pewnością mógłbyś wybrać dłuższą trasę, są to dwie dodatkowe linie, które po prostu dodają cruft i dodatkowy kontekst do śledzenia (mentalnie). W rzeczywistości nie potrzebujesz dodatkowej zmiennej lokalnej - chociaż może być przydatna przy debugowaniu. Państwo mogłoby po prostu:
Rzeczywiście, mógłbym nawet ulec pokusie, aby użyć notacji z kropką i umieścić
Where
warunek wSingleOrDefault
:źródło
Zerknij na to
Zrozumienie instrukcji „using” w języku C #
źródło
Nie ma żadnych skutków ubocznych powrotu z wnętrza
using()
instrukcji.To, czy tworzy najbardziej czytelny kod, to inna dyskusja.
źródło
Myślę, że to wszystko jedno. W kodzie nie ma nic złego. Platforma .NET nie obchodziłaby, gdzie tworzony jest obiekt. Liczy się to, czy istnieje odniesienie, czy nie.
źródło
Tak, może wystąpić efekt uboczny. Na przykład, jeśli użyjesz tej samej techniki w metodzie ASP.NET MVC Action, pojawi się następujący błąd: „Wystąpienie ObjectContext zostało usunięte i nie można go już używać do operacji wymagających połączenia”
źródło