본문 바로가기

IT

[C#] bool.Parser vs Convert.ToBoolean()




안녕하세요,

러시아 모스크바에서 생활하고 있는 개발자 윤진입니다.

영하 24도로 시작하는 상쾌한 아침이라 외출하기가 너무 겁나네요.

그래서 이렇게 두문불출하고 있습니다. 우훗.


이번에는 모든 프로그래밍 언어의 기본이라 할 수 있는 자료형변환에 대해 살짝 살펴보겠습니다.

C언어에서는 0, 1 값을 false, true로 매핑하여 사용했는데요,

(물론, stdbool.h를 불러와서 사용할 수도 있었죠.)

C#에도 아래 코드처럼 int를 boolean으로 바꿀 수 있지 않을까 기대했었죠.

Console.WriteLine(Boolean.Parse(1));

하지만, 위의 코드는 동작하지 않더군요. :)


C#에서는 boolean structure를 사용해서 false, true 값을 지정할 수 있습니다.

[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Boolean : IComparable, IConvertible, IComparable, 
	IEquatable


그렇다면, Parse()도 어떤 type의 값을 argument로 받아 들일까요?

MSDN을 뒤져보니 Parse() 메소드는 스트링 값만 받아들이고 있었습니다.

C에 익숙하기 때문에 Parse(0) 이나 Parse(1) 같은 형태로 사용할 수 없는게 내심 아쉽더군요.

Parse(String)

Converts the specified string representation of a logical value to its Boolean equivalent.



하지만, Convert.ToBoolean() 메소드를 통해 온갖 byte, int, char, string 등의 값을 boolean으로 바꿀 수 있습니다.

            Console.WriteLine(Convert.ToBoolean(0)); // False
            Console.WriteLine(Convert.ToBoolean(1)); // True

StackOverFlow에 걸린 답변들을 보니,

Convert.ToBoolean()는 다양한 형을 argument로 받아 bool.Parse() 보다 느릴 수도 있다는 의견도 있습니다만,

bool.Parse(string)과 Convert.ToBoolean(string)을 비교해보면,

결국 같은 루틴에 유사한 성능을 보일거라 생각합니다.


Overload List

NameDescription
System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Boolean)

Returns the specified Boolean value; no actual conversion is performed.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Byte)

Converts the value of the specified 8-bit unsigned integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Char)

Calling this method always throws InvalidCastException.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(DateTime)

Calling this method always throws InvalidCastException.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Decimal)

Converts the value of the specified decimal number to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Double)

Converts the value of the specified double-precision floating-point number to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Int16)

Converts the value of the specified 16-bit signed integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Int32)

Converts the value of the specified 32-bit signed integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Int64)

Converts the value of the specified 64-bit signed integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Object)

Converts the value of a specified object to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Object, IFormatProvider)

Converts the value of the specified object to an equivalent Boolean value, using the specified culture-specific formatting information.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(SByte)

Converts the value of the specified 8-bit signed integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Single)

Converts the value of the specified single-precision floating-point number to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(String)

Converts the specified string representation of a logical value to its Boolean equivalent.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(String, IFormatProvider)

Converts the specified string representation of a logical value to its Boolean equivalent, using the specified culture-specific formatting information.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(UInt16)

Converts the value of the specified 16-bit unsigned integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(UInt32)

Converts the value of the specified 32-bit unsigned integer to an equivalent Boolean value.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(UInt64)

Converts the value of the specified 64-bit unsigned integer to an equivalent Boolean value.



* Reference

https://msdn.microsoft.com/en-us/library/system.boolean(v=vs.110).aspx