Ponieważ instrukcja C# używająca jest tylko syntaktycznym cukrem dla try/finally {dispose} dlaczego akceptuje wiele obiektów TYLKO JEŚLI JEST TO TYM SAMEGO TYPU?przy użyciu różnych typów w instrukcji using (C#)
Nie rozumiem tego, ponieważ wszystko, co musi być, jest IDisposable. Jeśli wszystkie implementują IDisposable, powinno być dobrze, ale tak nie jest.
Konkretnie jestem przyzwyczajony do pisania
using (var cmd = new SqlCommand())
{
using (cmd.Connection)
{
// code
}
}
które kompaktowy do:
using (var cmd = new SqlCommand())
using (cmd.Connection)
{
// code
}
i chciałbym kompaktowy ponadto do:
using(var cmd = new SqlCommand(), var con = cmd.Connection)
{
// code
}
ale nie mogę . Mógłbym prawdopodobnie, niektórzy twierdzą, napisać:
using((var cmd = new SqlCommand()).Connection)
{
// code
}
ponieważ wszystko muszę wyrzucać jest związek, a nie polecenie, ale to prócz tego punktu.
Czy uczę się czegoś nowego tutaj? Co oznacza druga, nieprzypisana instrukcja użycia w najwyższym przykładzie? Czy ten przedmiot staje się zakresem? – spender
@spender: argumentem użycia musi być wyrażenie, które można przekonwertować na IDisposable. Deklaracja jest (tylko jednym) takim wyrażeniem. –
@spender: Tak, ty (prawdopodobnie) nauczyłeś się czegoś nowego. Składnia użycia używa instrukcji (IDisposableInstance) ;. Tak jak Henk Holterman powiedział, że przydział jest operacją, której wynik (często nieużywany, ale tutaj użyty) jest wartością przypisaną. –