러시아 모스크바에서 생활하고 있는 개발자 윤진입니다.
영하 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
Name | Description | |
---|---|---|
ToBoolean(Boolean) | Returns the specified Boolean value; no actual conversion is performed. | |
ToBoolean(Byte) | Converts the value of the specified 8-bit unsigned integer to an equivalent Boolean value. | |
ToBoolean(Char) | Calling this method always throws InvalidCastException. | |
ToBoolean(DateTime) | Calling this method always throws InvalidCastException. | |
ToBoolean(Decimal) | Converts the value of the specified decimal number to an equivalent Boolean value. | |
ToBoolean(Double) | Converts the value of the specified double-precision floating-point number to an equivalent Boolean value. | |
ToBoolean(Int16) | Converts the value of the specified 16-bit signed integer to an equivalent Boolean value. | |
ToBoolean(Int32) | Converts the value of the specified 32-bit signed integer to an equivalent Boolean value. | |
ToBoolean(Int64) | Converts the value of the specified 64-bit signed integer to an equivalent Boolean value. | |
ToBoolean(Object) | Converts the value of a specified object to an equivalent Boolean value. | |
ToBoolean(Object, IFormatProvider) | Converts the value of the specified object to an equivalent Boolean value, using the specified culture-specific formatting information. | |
ToBoolean(SByte) | Converts the value of the specified 8-bit signed integer to an equivalent Boolean value. | |
ToBoolean(Single) | Converts the value of the specified single-precision floating-point number to an equivalent Boolean value. | |
ToBoolean(String) | Converts the specified string representation of a logical value to its Boolean equivalent. | |
ToBoolean(String, IFormatProvider) | Converts the specified string representation of a logical value to its Boolean equivalent, using the specified culture-specific formatting information. | |
ToBoolean(UInt16) | Converts the value of the specified 16-bit unsigned integer to an equivalent Boolean value. | |
ToBoolean(UInt32) | Converts the value of the specified 32-bit unsigned integer to an equivalent Boolean value. | |
ToBoolean(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
'IT' 카테고리의 다른 글
[C#] 늘 헛갈리 Modal vs Modeless (0) | 2017.02.07 |
---|---|
[C#] 소수점이 있는 숫자는 float일까 double일까. (30) | 2017.02.04 |
[C#] readonly 변수를 사용하는 이유는? (30) | 2017.02.02 |
[C#] 왜 partial class를 사용하는걸까요? (34) | 2017.02.01 |
[C#] char[]를 string으로 변환하기 (30) | 2017.01.31 |
[C#] Unicode에서 한글 초성/중성/종성에 대한 짧은 고찰 (0) | 2017.01.29 |
[C#] UTF-16의 캐릭터 크기에 대한 간단한 탐구 (0) | 2017.01.28 |
[C#] int.MaxValue 코딩컨벤션에 대한 사소한 의문 (30) | 2017.01.27 |
[C#] 코딩컨벤션, linux_kernel_coding_style vs camelCase vs PascalCase (2) | 2017.01.26 |
[Visual Studio] Start debugging vs Start without debugging (1) | 2017.01.16 |