TryCast i DirectCast są operatorami odlewania, które są bezpośrednio odwzorowane na obsługę rzutowania przez CLR. Mogą szybko rzutować obiekt typu bazowego na typ wyprowadzony lub rozpakować wartość typu wartości. DirectCast zgłasza wyjątek, gdy rzutowanie nie jest możliwe, program TryCast zwraca Nic, jeśli się nie udało. Zazwyczaj chcesz faworyzować DirectCast, aby złapać błędy w programowaniu.
CType pozwala na nadzbiór nad konwersjami, takie, na które CLR patrzy. Najlepszym przykładem, jaki mogę wymyślić jest zamiana ciągu na liczbę lub datę. Na przykład:
Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)
Które musisz użyć, jeśli opcja Strict On jest włączona. Jeśli jest wyłączony następnie można to zrobić bezpośrednio:
Option Strict Off
...
Dim dt As DateTime = obj
Bardzo wygodny i oczywiście część spuścizny VB.NET jako dynamicznie wpisywanych języka. Ale nie bez problemów, ta data to dzień Unicorn na stackoverflow.com, ale będzie to dzień w styczniu, kiedy Brytyjczyk wejdzie do łańcucha. Nieoczekiwane konwersje powodują, że CLR nie zezwala na nie bezpośrednio. Wyraźna, nigdy konwersja niespodzianką wygląda następująco:
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)
czy należy kupić w try/DirectCast vs CType vs jawnych konwersji jest raczej osobistym wyborem. Jeśli teraz programujesz z Option Strict On, zdecydowanie powinieneś zacząć używać metody Try/DirectCast. Jeśli preferujesz język VB.NET, ponieważ lubisz wygodę pisania dynamicznego, nie wahaj się pozostać przy CType.
możliwe duplikat [Różnica pomiędzy DirectCast() i CType() w VB.NET] (http://stackoverflow.com/questions/3056514/difference-between-directcast-and-ctype-in -vb-net) – RMalke
@RMalke: Moje pytanie zadano przed połączonym pytaniem ["duplikat"] (http://stackoverflow.com/q/3056514). Potwierdza to [komentarz MarkJ] (http://stackoverflow.com/posts/comments/3138442). Dodatkowo, przyjęta tutaj odpowiedź wyjaśnia szczegółowo rzucanie "CType", czego tak naprawdę nie akceptuje zaakceptowana odpowiedź w drugim pytaniu. Jeśli już, to uważam, że to druga, która musi zostać zamknięta lub w inny sposób z tym powiązana. –