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)
Author: Community, 2008-09-03

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śli var 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 co CType.
  • 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 jak DirectCast, ale zwróci Nothing jeśli zmienna nie może być przekonwertowana na łańcuch, zamiast rzucać wyjątek. Jest to to samo co var as string W C#. Strona TryCast na MSDN też ma dobre porównanie.
 142
Author: bdukes,
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

 10
Author: Siddharth Rout,
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.

 8
Author: NotMyself,
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.

 7
Author: OwenP,
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".

 3
Author: Zack Peterson,
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.

 1
Author: SickPuP,
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.

 0
Author: joek1975,
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