2017-10-26 4 views
2

C++에서는 다른 모든 값이 true 인 반면 false로 가정합니다. 나는 C#에서이 개념이 동일하다는 인상을 받았다.Convert Char To Boolean

저는 char을 bool로 변환하려고합니다.

char c = (char)0; 
Convert.ToBoolean(c).Dump(); 

그것은 아무리 내가 항상에 오류를 '샤아'에서

잘못된 캐스트를 얻을 변환하려고 어떤 문자 '부울

이해가없는 것처럼 내가 무엇을 위해 할 수있는 것 내 자신의 사용자 지정 함수를 작성하면이 문제를 해결할 수 있지만 이해하려고하는 것은 있습니다.

이 메서드의 용도는 무엇입니까? Char 값이 Bool로 변환되는 이유는 무엇입니까?

+0

당신은 불리언으로 바이트 또는 INT32로 사용할 수 있습니다. 그러나 char 또는 string을 사용하면이 작업을 수행 할 수 없습니다. byte 및 int의 경우, 0 이외의 모든 값에 대해서만 false를 얻을 것이며, double 또는 float 유형에도이 변환을 사용할 수 있습니다. –

답변

2

을 당신은 말했다 :

나는 C#에서이 개념이 동일한 것을 인상이었다.

당신은 착각했습니다. 그렇지 않습니다. 이 두 언어는 그 방식이 다르게 동작하며 CharBoolean으로 변환 할 수 없습니다.

이 방법은 항상 InvalidCastException을 던졌습니다 호출 :

문서는 분명히 방법이 항상 실패합니다.

및 ...

반환 값

유형 :이 변환은 지원되지 않습니다 System.Boolean

. 값은 반환되지 않습니다. Char.ToBoolean()의 소스에 의해 입증

:

[__DynamicallyInvokable] 
bool IConvertible.ToBoolean(IFormatProvider provider) 
{ 
    object[] values = new object[] { "Char", "Boolean" }; 
    throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", values)); 
} 

CharIConvertible 클래스에서 상속되는 바와 같이, 상기 과부하를 제공 할 필요가있다. 그러나이 변환은 불가능하므로 항상 예외가 반환됩니다.

1

안전하지 않은 키워드 (C++과 유사)로 어떻게 수행 할 수 있는지 보여주십시오. 이를 사용하지 마십시오 ..

char c = (char)0; 
unsafe{ 
    bool b = *((bool *)&c); 
} 
+2

왜'c == 0'을 쓰는 것 이상으로 이것을 할 수 있습니까? – Servy

+0

@Servy 한 유형을 다른 유형으로 변환 할 수있는 방법을 보여줄 수 있습니다. * – Eser

+2

그러나 'char'를 'bool'로 변환하는 방법에 대해 질문하지 않았습니다. 질문은 그들은 이미 값을 변환하기 위해 자신의 코드를 작성하는 방법을 알고있었습니다. 그들은'Convert.ToBoolean'의 동작에 대해 질문하고있었습니다. – Servy

1

이 방법의 목적은 무엇입니까? .NET 2.0 documentation에서

:이 방법은 나중에 사용하기 위해 예약되어 있습니다

.

아마도 그들은 C++ 라인을 따라 구현하려고했지만 결국에는 결정하지 않았습니다.

편집 - IConvertible은 하지

char.ToBoolean() 방법에 대한 몇 가지 혼란이있을 것으로 보인다 이유입니다.

((IConvertible)someChar).ToBoolean(...); 

Convert.ToBoolean과 별개로 발행됩니다. (명시 적 변환이 처음 인 이유는 - here 참조) charIConvertible으로 만들 때 이전의 을 구현해야했습니다. 후자는 단순히 생성되지 않았을 수 있으므로 왜 그 방법 (Convert.ToBoolean)이 존재 하는가에 대한 질문은 하위 호환성 + 원래의 의도에 대해서만 응답하는 것으로 보인다.

(I이 오해하는 사람이있는 경우 - 나를 물론, 알려 주시기 바랍니다.)