Cast 또는 Convert를 사용하는 경우
Convert.toInt32 ()를 사용하는 것과 비교하여 int를 말하는 캐스트의 차이점을 알고 싶습니다. 하나를 사용하면 일종의 성능 향상이 있습니까?
또한 각각 어떤 상황에 사용해야하는지. 현재 저는 Convert를 사용하는 경향이 더 있지만 어느 쪽이든 갈 이유가 없습니다. 내 마음 속에는 둘 다 같은 목표를 달성하는 것을 봅니다.
다른 포럼에서 Diff Between Cast and Convert 보기
대답
Convert.ToInt32(String, IFormatProvider)
아래는 호출Int32.Parse
(읽기 발언).
유일한 차이점은 널 (null) 문자열이 전달되는 경우가 반환되도록0
, 반면Int32.Parse
을 던졌습니다ArgumentNullException
.
어느 쪽을 사용하든 정말 선택의 문제입니다.
개인적으로는 둘 다 사용하지 않으며 TryParse
기능 을 사용하는 경향이 있습니다 (예 :) System.Int32.TryParse()
.
최신 정보
상단의 링크가 끊어졌습니다 . StackOverflow 에서이 답변 을 참조 하세요 .
실제로 유형일 때 캐스트 int
, 아닌 경우 변환 int
하지만 하나가되기를 원할 때.
예를 들어 int i = (int)o;
o가 정수라는 것을 알고있을 때
int i = Convert.ToInt32("123")
"123"은 int가 아니기 때문에 int의 문자열 표현입니다.
또 다른 차이점이 있습니다. "변환"은 항상 오버플로 확인되지만 "캐스트"는 설정 및 사용 된 "선택"또는 "선택 취소"키워드에 따라 달라질 수 있습니다.
더 명확하게. 코드를 고려하십시오.
int source = 260;
byte destination = (byte)source;
그러면 목적지는 경고없이 4가됩니다.
그러나:
int source = 260;
byte destination = Convert.ToByte(source);
예외를 줄 것입니다.
모든 유형이 다음과 같은 변환을 지원하는 것은 아닙니다.
int i = 0;
decimal d = (decimal)i;
명시 적 연산자 를 구현하는 데 필요하기 때문 입니다. 그러나 .NET은 IConvertible 인터페이스 도 제공 하므로 모든 유형이 해당 인터페이스를 구현하면 대부분의 프레임 워크 기본 제공 유형으로 변환 될 수 있습니다. 마지막으로 Convert 클래스는 IConvertible 인터페이스를 구현하는 형식으로 작동하는 데 도움이됩니다.
캐스트는 컴파일러에게이 객체가 실제로 다른 유형의 구현임을 알리고 이제 새 구현처럼 처리하도록합니다. 개종자는 이것이 당신이 변환하려는 대상에서 상속되지 않는다고 말하지만 그렇게 할 수있는 방법이 있습니다. 예를 들어 "16"을 정수로 바꾸고 있다고 가정합니다. "16"은 문자열이며 어떤 식 으로든 int에서 상속하지 않습니다. 그러나 "16"이 int 16으로 바뀔 수 있다는 것은 분명합니다.
내 2c에 던지면 개념적 구별이 유용 할 것 같습니다. 내가 전문가가 아니라 .. :
캐스팅은 대표적인 유형을 바꾸고 있습니다. 따라서 "32"와 32L 및 32.0f는 서로간에 캐스팅하는 것이 합리적으로 보입니다. C #은 "32"를 자동으로 지원하지 않지만 대부분의 동적 언어는 지원합니다. 따라서 (long) "32"또는 (String) 32L을 사용하겠습니다. 내가 할 수있을 때. 또 다른 규칙이 있습니다. 캐스팅은 왕복 가능해야합니다.
변환은 왕복 가능할 필요가 없으며 단순히 완전히 새로운 객체를 만들 수 있습니다.
회색 영역은 예를 들어 문자열 "32xx"입니다. 캐스트하면 32L가되는 경우가 있습니다 (수는 불가능할 때까지 파싱). Perl이 이것을 사용했습니다. 그러나 이것은 내 왕복 요구 사항을 위반합니다. 32.5f에서 32L까지도 마찬가지입니다. 매우 정적으로 입력 된 언어를 포함하여 거의 모든 언어에서이를 허용하며 왕복 가능한 규칙에도 실패합니다. "32"가 캐스트되도록 허용하면 컴파일 타임에 "32xxx"인지 알 수 없다는 점에서 회색입니다.
만들 수있는 또 다른 차이점은 "makeLookLikeA"가 아닌 "IsA"에 캐스팅을 사용하는 것입니다. 따라서 문자열이 데이터베이스에서 가져 왔지만 실제로 비공식 스키마의 int 인 경우 캐스트를 자유롭게 사용할 수 있습니다 (이 경우 C #에서는 어쨌든 Convert를 사용하기를 원합니다). 플로트도 마찬가지입니다. 그러나 캐스트를 사용하여 플로트를 자르는 경우에는 아닙니다. 이 구분은 또한 DownCasting 및 UpCasting을 설명합니다. 객체는 항상 'IsA'였지만 유형은 목록에 대해 일반화되었을 수 있습니다.
Convert.ToInt32
예를 들어 문자열을 사용할 수 있는 많은 오버로드 가 있습니다. 문자열을 int로 캐스트하려고하면 컴파일 오류가 발생합니다. 요점은 그들이 다른 용도로 사용된다는 것입니다. 변환은 캐스팅하려는 개체가 어떤 유형인지 확실하지 않을 때 특히 유용합니다.
캐스트 대신 Convert.ToInt32를 사용해야하는 또 다른 이유가 있습니다.
예를 들면 :
float a = 1.3f;
float b = 0.02f;
int c = (int)(a / b);
int d = Convert.ToInt32(a / b);`
결과는 c = 64 및 d = 65입니다.
문자열 번호 = "123abc";
int num;
Int32.TryParse (number, out num); //이 호출에서 예외가 발생하지 않습니다.
Convert.ToInt32 (숫자); //이 호출에서 예외가 발생합니다.
참고 URL : https://stackoverflow.com/questions/3168704/when-to-use-a-cast-or-convert
'Program Tip' 카테고리의 다른 글
MySQL 데이터베이스에 연결하는 방법은 무엇입니까? (0) | 2020.10.21 |
---|---|
Django의 고유 한 BooleanField 값? (0) | 2020.10.21 |
PostgreSQL 9.2.1과 Hibernate 연결 (0) | 2020.10.21 |
디버그 중 SSIS에서 변수 감시 (0) | 2020.10.21 |
수식 만 사용하여 Excel에서 고유 한 값 가져 오기 (0) | 2020.10.21 |