[.net] VB.NET에서 어떻게 캐스팅해야합니까?

이 모든 것이 동일합니까? 어떤 상황에서 서로를 선택해야합니까?

  • var.ToString ()

  • CStr (var)

  • C 타입 (var, String)

  • DirectCast (var, String)


편집 : NotMyself의 제안 …

  • TryCast (var, String)


답변

그것들은 모두 약간 다르며 일반적으로 사용이 허용됩니다.

  • var.ToString()어떤 유형인지에 관계없이 객체의 문자열 표현을 제공합니다. var문자열이 아닌 경우 이것을 사용하십시오 .
  • CStr(var)VB 문자열 캐스트 연산자입니다. 나는 VB 사람이 아니므로 피하는 것이 좋지만 실제로 아무것도 아프지 않을 것입니다. 나는 그것이 기본적으로와 같다고 생각합니다 CType.
  • CType(var, String) 제공된 변환 연산자를 사용하여 지정된 유형을 문자열로 변환합니다.
  • DirectCast(var, String)객체를 문자열로 업 캐스트하는 데 사용됩니다. 객체 변수가 실제로 문자열이라는 것을 알고 있다면 이것을 사용하십시오. 이것은 (string)varC #에서 와 동일 합니다.
  • TryCast(@ NotMyself 에서 언급했듯이 )는 같지만 변수를 예외로 처리하지 않고 문자열로 변환 할 수없는 경우 DirectCast반환 Nothing합니다. 이것은 var as stringC #에서 와 동일 합니다. TryCastMSDN 의 페이지도 잘 비교됩니다.

답변

Cstr() 더 나은 성능을 위해 인라인으로 컴파일됩니다.

CType 변환 연산자가 정의 된 경우 유형 간 캐스트 가능

ToString() 변환 할 수없는 경우 기본 유형과 문자열 사이에서 예외가 발생합니다.

TryParse()String에서 base까지 typeif가능하면 false를 반환합니다.

DirectCast유형이 상속을 통해 관련되거나 공통 인터페이스를 공유하는 경우 사용되며 캐스트가 불가능하면 예외가 발생 trycast하고이 인스턴스에서 아무것도 반환하지 않습니다


답변

MSDN 은 특정 유형에 대한 Cxxx 캐스트가 인라인 코드로 변환되기 때문에 VB .NET에서 성능을 향상시킬 수 있음을 나타냅니다. 어떤 이유로 든 특정 유형의 CType과 달리 DirectCast 를 제안 합니다 (문서에는 상속 관계가있을 때의 내용이 나와 있습니다. VB 런타임.)

VB .NET 코드를 작성할 때 내가 사용하는 작업은 수행중인 작업에 따라 다릅니다. 프로토 타입 코드라면 버릴 것입니다. 나는 입력하는 모든 것을 사용합니다. 내가 진지한 코드라면 Cxxx 캐스트를 사용하려고합니다. 존재하지 않는 경우 상속 관계가 있다고 합리적으로 믿는 경우 DirectCast를 사용합니다. 캐스트가 성공 해야하는지 잘 모르는 상황 (예 : 사용자 입력-> 정수) 인 경우 TryCast를 사용하여 사용자에게 예외를 던지는 것보다 친절한 작업을 수행합니다.

내가 흔들 수없는 한 가지는 CStr 대신 ToString을 사용하는 경향이 있지만 Cstr이 더 빠르다는 것입니다.


답변

다음 구문을 선호합니다.

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

Hah는 일반적으로 C #으로 코드를 작성한다고 말할 수 있습니다. 8)

내가 TryCast를 선호하는 이유는 예외 캐스팅의 오버 헤드를 망칠 필요가 없기 때문입니다. 캐스트가 성공하거나 변수가 null로 초기화되고 그에 따라 처리됩니다.


답변


답변

인증 시험에 따르면 CXXX 변환보다 성능이 더 우수하므로 간단한 변환에 가능할 때마다 Convert.ToXXX ()를 사용해야합니다.


답변

한 번에, MSDN 라이브러리 상태가 더 빠르기 때문에 CStr ()을 사용하는 것을 보았습니다. 그래도 이것이 사실인지 모르겠습니다.