문제

이것들은 모두 동등합니까?어떤 상황에서 다른 것보다 각각을 선택해야 합니까?

  • var.ToString()

  • CStr(변수)

  • CType(var, 문자열)

  • DirectCast(var, 문자열)


편집하다:의 제안 나 자신이 아니다

  • TryCast(var, 문자열)
도움이 되었습니까?

해결책

그것들은 모두 약간 다르며 일반적으로 허용되는 사용법을 가지고 있습니다.

  • var.ToString() 유형에 관계없이 객체의 문자열 표현을 제공합니다.다음과 같은 경우에 이것을 사용하세요 var 이미 문자열이 아닙니다.
  • CStr(var) VB 문자열 캐스트 연산자입니다.저는 VB 전문가가 아니므로 피하는 것이 좋습니다. 하지만 실제로 아무 것도 해치지 않을 것입니다.기본적으로는 같다고 생각해요 CType.
  • CType(var, String) 제공된 변환 연산자를 사용하여 주어진 유형을 문자열로 변환합니다.
  • DirectCast(var, String) 객체를 문자열로 업캐스트하는 데 사용됩니다.객체 변수가 실제로 문자열이라는 것을 알고 있다면 이것을 사용하십시오.이는 다음과 같습니다. (string)var C#에서.
  • TryCast (@에서 언급했듯이나 자신이 아니다) 처럼 DirectCast, 하지만 반환됩니다 Nothing 변수를 문자열로 변환할 수 없는 경우에는 예외를 발생시키지 않습니다.이는 다음과 같습니다. var as string C#에서.그만큼 TryCast MSDN 페이지에도 좋은 비교가 있습니다.

다른 팁

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

CType 변환 연산자가 정의된 경우 유형 간 캐스트를 허용합니다.

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

TryParse() 문자열에서 베이스까지 typeif 가능하지 않으면 false를 반환합니다.

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

나는 다음 구문을 선호합니다.

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

If str IsNot Nothing Then

하하 저는 일반적으로 C#으로 코드를 작성한다는 것을 알 수 있습니다.8)

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

MSDN 특정 유형에 대한 Cxxx 캐스트가 인라인 코드로 변환되기 때문에 VB .NET의 성능을 향상시킬 수 있음을 나타내는 것 같습니다.어떤 이유로 그것은 또한 제안합니다 다이렉트캐스트 어떤 경우에는 CType과 반대입니다(문서에는 상속 관계가 있을 때라고 명시되어 있습니다.나는 이것이 컴파일 타임에 캐스트의 온전성을 확인하고 최적화를 적용할 수 있다는 것을 의미한다고 생각합니다. 반면 CType은 항상 VB 런타임을 사용합니다.)

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

한 가지 확실한 사실은 CStr 대신 ToString을 사용하는 경향이 있지만 아마도 Cstr이 더 빠르다는 것입니다.

인증 시험에 따르면 간단한 변환에는 가능할 때마다 Convert.ToXXX()를 사용해야 합니다. CXXX 변환보다 성능을 더 잘 최적화하기 때문입니다.

한때 MSDN 라이브러리 상태에서 CStr()을 사용하는 것이 더 빠르다는 것을 본 기억이 납니다.그래도 이것이 사실인지는 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top