Jak mam wrzucać VB.NET?
Czy wszystkie są równe? W jakich okolicznościach powinienem wybrać każdego z nich?
Var.ToString()
-
CStr (var)
-
CType (var, String)
-
DirectCast (var, String)
EDIT: sugestia z NotMyself...
- TryCast (var, String)
7 answers
Wszystkie są nieco inne i ogólnie mają akceptowalne użycie.
-
var.
ToString
()
da ci reprezentację string obiektu, niezależnie od tego, jaki to jest typ. Użyj tego, jeślivar
nie jest już ciągiem znaków. -
CStr
(var)
jest operatorem VB string cast. Nie jestem facetem od VB, więc sugerowałbym unikanie tego, ale to naprawdę nic nie zaszkodzi. Myślę, że jest to w zasadzie to samo coCType
. -
CType
(var, String)
konwertuje dany typ na łańcuch znaków, używając dowolnych operatorów konwersji. -
DirectCast
(var, String)
jest używany do up-cast obiektu w ciągu. Jeśli wiesz, że zmienna obiektowa jest w rzeczywistości łańcuchem znaków, użyj tego. Jest to to samo co(string)var
W C#. -
TryCast
(Jak wspomniano przez @ NotMyself) jest jakDirectCast
, ale zwróciNothing
jeśli zmienna nie może być przekonwertowana na łańcuch, zamiast rzucać wyjątek. Jest to to samo covar as string
W C#. StronaTryCast
na MSDN też ma dobre porównanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:36
Cstr()
jest skompilowany w linii dla lepszej wydajności.
CType
pozwala na rzuty pomiędzy typami, jeśli zdefiniowany jest operator konwersji
ToString()
pomiędzy typem bazowym a string rzuca wyjątek, jeśli konwersja nie jest możliwa.
TryParse()
From String to base typeif
possible otherwise returns false
DirectCast
używane, jeśli typy są powiązane poprzez dziedziczenie lub współdzielą wspólny interfejs, rzuci wyjątek, jeśli obsada nie jest możliwa, trycast
nie zwróci nic w tym instancja
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-09 21:55:08
Preferuję następującą składnię:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Hah można powiedzieć, że zazwyczaj piszę kod w C#. 8)
Powodem, dla którego wolę TryCast, jest to, że nie musisz zadzierać z kosztami wyjątków od rzucania. Twój cast albo się powiedzie, albo twoja zmienna zostanie zainicjowana na null i odpowiednio się z tym uporasz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-27 03:42:20
MSDN wydaje się wskazywać, że odlewy Cxxx dla określonych typów mogą poprawić wydajność w VB. NET, ponieważ są konwertowane do kodu inline. Z jakiegoś powodu sugeruje również DirectCast w przeciwieństwie do CType w pewnych przypadkach (dokumentacja stwierdza, że jest to relacja dziedziczenia; wierzę, że oznacza to, że rozsądek cast jest sprawdzany podczas kompilacji i optymalizacje mogą być stosowane, podczas gdy CType zawsze używa środowiska uruchomieniowego VB.)
Kiedy piszę Kod VB. NET, to, czego używam, zależy od tego, co robię. Jeśli to kod prototypu, który zamierzam wyrzucić, używam tego, co się stanie, aby wpisać. Jeśli chodzi o kod, to staram się użyć cxxx. Jeśli jeden nie istnieje, używam DirectCast, jeśli mam uzasadnione przekonanie, że istnieje związek dziedziczenia. Jeśli jest to sytuacja, w której nie mam pojęcia, czy obsada powinna się udać( np. wejście użytkownika - > liczby całkowite), to używam Trycasta, aby zrobić coś bardziej przyjaznego niż wrzucić wyjątek na użytkownik.
Jednej rzeczy nie mogę się pozbyć to zazwyczaj używam ToString zamiast CStr ale podobno CSTR jest szybszy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 22:12:07
User Konrad Rudolph For DirectCast () in Stack Overflow question "Hidden Features of VB.NET".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:54
Zgodnie z egzaminem certyfikacyjnym należy użyć Convert.ToXXX () w miarę możliwości dla prostych konwersji, ponieważ optymalizuje wydajność lepiej niż konwersje CXXX.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-16 18:44:19
Kiedyś widziałem stan biblioteki MSDN, aby używać CSTR (), ponieważ była szybsza. Nie wiem, czy to prawda.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 19:03:09