Biorąc pod uwagę następujący kod w Visual Basic.NET:
Dim x As New Dictionary(Of String, String)
x.Item("Foo") = "Bar"
Możesz uzyskać dostęp do „foo” element słownika przy użyciu jednego z następujących powodów:
Dim a = x!Foo
Dim b = x("Foo")
Dim c = x.Item("Foo")
Jeśli spojrzeć na IL pod Reflector.NET, a następnie przekonasz się, że wszystkie są tłumaczone na:
Dim a As String = x.Item("Foo")
Dim b As String = x.Item("Foo")
Dim c As String = x.Item("Foo")
Wszystkie są więc równoważne t w IL i, oczywiście, wszystkie one wykonują z tą samą prędkością.
Operator huk pozwala używać tylko zdefiniowanych statycznie kluczy, które są zgodne ze standardowymi regułami nazewnictwa zmiennych.
Stosując podejścia indeksowane, klucze mogą mieć prawie dowolną wartość prawidłową (w tym przypadku ciąg) i można używać zmiennych do reprezentowania klucza.
Dla czytelności kodu, polecam notację x.Item("Foo")
, ponieważ jest bardzo jasne, co się dzieje. x("Foo")
może być mylony z wywołaniem procedury i x!Foo
powoduje, że Foo
wygląda jak zmienna, a nie ciąg (który tak naprawdę jest). Nawet kodowanie kolorami Stack Overflow sprawia, że Foo
wygląda jak słowo kluczowe!
Odpowiednikiem C# dla tego kodu jest x["Foo"];
. Nie ma równoważnika składni !
.
Najważniejsze jest to, że !
nie jest lepszy ani gorszy pod względem wydajności i może utrudniać obsługę kodu, więc należy go unikać.
Dla przyszłego odniesienia ... Teraz zdałem sobie sprawę, że dla celów debugowania '!' Jest lepsze, ponieważ pozwala zobaczyć zawartość elementu na bieżącym indeksie stojąc na punkcie przerwania, podczas gdy inni powiedzą "nie można zobacz indeksowaną właściwość'. – PedroC88