2011-03-30 5 views
3

가능한 중복 :
difference between Convert.ToInt32 and (int)
Whats the main difference between int.Parse() and Convert.ToInt32int.Parse()와 ConvertTo.Int32()의 차이점은 무엇입니까?

C#

있습니까 거기에 유형 간의 차이 .Parse() 메소드와를 ConvertTo 클래스의 방법?

+1

가능한 [Convert.ToInt32와 (int) 사이의 차이] (http://stackoverflow.com/questions/1608801/difference-between-convert-toint32-and-int), [.Net Parse verses Convert] (http : //stackoverflow.com/questions/18465/net-parse-verses-convert) 및 [int.Parse()와 Convert.ToInt32의 주요 차이점은 무엇입니까? (http : // stackoverflow. 질문/199470/whats-the-main-difference-int-parse-and-convert-toint32) –

+0

더 안전하기 때문에 type.TryParse를 사용합니다. – CarneyCode

+1

더 정확한 중복은 '[int 사이의 주된 차이점은 무엇입니까? .Parse() 및 Convert.ToInt32] (http://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and-convert-toint32) '. – ladenedge

답변

0

몇 가지 차이점이 있습니다. 변환은 많은 개체 (Int16, 문자열, SByte 등)에서 Int32로 변환 할 수 있습니다. 또한 Int32.Parse는 NumberStyles를 수락 할 수 있으며 Convert.ToInt32는 수 없습니다. 그 외에는

은, 리플렉터 (http://reflector.red-gate.com)이 말을 가지고

클래스 변환 :

public static int ToInt32(string value) 
{ 
    if (value == null) 
    { 
     return 0; 
    } 
    return int.Parse(value, CultureInfo.CurrentCulture); 
} 
1

한 가지 주목할만한 차이점은 객체가 null의 경우 예외를 throw하지 않습니다 TypeConverter.ConvertTo (객체)이지만, type.parse 않습니다 그 내용이 null이 예외

3

없음 Int32.Parse을 사이에 상당한 차이가 없다 던졌습니다 및 Convert.ToInt32(string). 후자는 그냥 Int32.Parse에 전화의 전달

하나 개의 작은 차이하지만 당신이 Convert.ToInt32null를 전달하는 경우 Int32.ParseArgumentNullException

0

AFAIK를 통해 int.Parse()가에서 상속됩니다하면서, 0을 반환 할 것입니다 정의 된 Number 클래스입니다. Convert.ToIn32()는 IConvertable 인터페이스를 구현하고 변환을 처리하기 전에 전달한 객체의 유형을 가져옵니다.

어느 쪽이든 나는 그것이 어쨌든 Int32.Parse에서 끝나는 것 같아요.

0

여기 리플렉터를 사용하여 검색 코드입니다.

Int32.Parse

는 :

public static int Parse(string s) 
{ 
    return Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo); 
} 

internal static unsafe int ParseInt32(string s, NumberStyles style, 
    NumberFormatInfo info) 
{ 
    byte* stackBuffer = stackalloc byte[1 * 0x72]; 
    NumberBuffer number = new NumberBuffer(stackBuffer); 
    int num = 0; 
    StringToNumber(s, style, ref number, info, false); 
    if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None) 
    { 
     if (!HexNumberToInt32(ref number, ref num)) 
     { 
      throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); 
     } 
     return num; 
    } 
    if (!NumberToInt32(ref number, ref num)) 
    { 
     throw new OverflowException(Environment.GetResourceString("Overflow_Int32")); 
    } 
    return num; 
} 

Convert.ToInt32 :

public static int ToInt32(string value) 
{ 
    if (value == null) 
    { 
     return 0; 
    } 
    return int.Parse(value, CultureInfo.CurrentCulture); 
} 

그래서, Convert 어쨌든 Int32 방법을 호출합니다. Int32.Parse을 사용하는 것이 더 효율적이지만, null 인수를 전달할 때 예외가 발생할 수 있다는 점을 고려해야합니다.

1

가장 중요한 차이점은 다음과 같습니다

  • -Convert.ToInt32 (들)의가 null의 경우 예외를 발생하지만, 구문 분석()는 입력을 수집하는 경우 는
  • 을 수행하지 않습니다 사용자가 인 경우 일반적으로 사용자는 Int32입니다.TryParse()

  • Int32.Parse() 및 Int32.TryParse() 은 문자열 만 변환 할 수 있습니다. Convert.ToInt32()는 IConvertible을 구현하는 모든 클래스 을 사용할 수 있습니다. 모든 진리에 기본적으로

  • , 당신은 TryParse에서 소스에 을 볼 때이 실제로 전혀 처리도 예외가 없습니다 - 단지 캐릭터 조작과 비트 성능 자세한 내용은

  • 이동을,이 게시물을 읽을 : http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx

0

변환 또는 직접 캐스팅 데이터가 손실 될 수 있습니다. 당신은 주조 또는 개조에 "있는 그대로"및 "있는 그대로"사용하는 것을 고려해야합니다. 데이터 손실에 대한 보호 외에도 런타임시이 둘 모두가 더 효율적입니다.

Austin이 말한 것처럼, 구문 분석을 수행하려면 tryparse를 사용하고 그에 따라 오류를 처리하십시오.

관련 문제