programing

부울을 사용하는 이유.ToString 출력 "참"이 아닌 "참"

megabox 2023. 5. 24. 21:52
반응형

부울을 사용하는 이유.ToString 출력 "참"이 아닌 "참"

true.ToString() 
false.toString();

Output:
True
False

"참"이지 "참"이 아닌 것에 대한 타당한 이유가 있습니까?XML을 XML의 부울 형식으로 쓸 때 구분되며 C#의 true/false와 호환되지 않습니다(그러나 CLS는 확실하지 않습니다).

갱신하다

다음은 C#(XML과 함께 사용)에서 이 문제를 해결하는 저의 아주 멋진 방법입니다.

internal static string ToXmlString(this bool b)
{
    return b.ToString().ToLower();
}

물론 스택에 메소드를 하나 더 추가하지만 ToLowers()는 모든 곳에서 제거됩니다.

마이크로소프트에서 온 사람들만이 그 질문에 대답할 수 있습니다.하지만, 저는 그것에 대한 재미있는 사실들을 제공하고 싶습니다 ;)

먼저, MSDN에서 부울에 대해 이렇게 말합니다.ToString() 메서드:

반환 값

유형: 시스템.

인스턴스의 값이 true이면 TrueString이고, 이 인스턴스의 값이 false이면 FalseString입니다.

언급

이 메서드는 상수 "True" 또는 "False"를 반환합니다.XML은 대소문자를 구분하며 XML 사양은 "true" 및 "false"를 유효한 부울 값 집합으로 인식합니다.ToString() 메서드에서 반환된 String 개체를 XML 파일에 써야 하는 경우 해당 개체의 String이 됩니다.ToLower 메서드를 먼저 호출하여 소문자로 변환해야 합니다.

재미있는 사실 #1은 TrueString 또는 FalseString을 전혀 반환하지 않는다는 것입니다.하드 코딩된 리터럴 "True" 및 "False"를 사용합니다.필드를 사용하면 아무런 도움이 되지 않습니다. 읽기 전용으로 표시되므로 변경할 수 없습니다.

대체 방법인 부울입니다.문자열로(IFormatProvider)가 더 재미있습니다.

언급

공급자 매개 변수가 예약되었습니다.이 메서드의 실행에는 참여하지 않습니다.이것은 부울을 의미합니다.문자열로(IFormatProvider) 메서드는 공급자 매개 변수가 있는 대부분의 메서드와 달리 문화별 설정을 반영하지 않습니다.

해결책은 무엇입니까?당신이 정확히 무엇을 하려고 하는지에 달려 있습니다.그것이 무엇이든 간에, 나는 그것이 해킹을 필요로 할 것이라고 장담합니다 ;)

.NET 환경은 다양한 언어를 지원하도록 설계되었기 때문입니다.

System.Boolean(mscorlib.dll)은 부울 데이터 유형을 지원하기 위해 언어에서 내부적으로 사용하도록 설계되었습니다.C#은 키워드에 모든 소문자를 사용하므로 'bool', 'true' 및 'false'가 사용됩니다.

그러나 VB.NET은 표준 케이스를 사용하므로 'Boolean', 'True' 및 'False'가 사용됩니다.

언어들이 함께 작동해야 하기 때문에, 당신은 사실일 수 없습니다.ToString()(C#)이 True에 다른 결과를 제공합니다.ToString()(VB.NET).CLR 설계자는 ToString() 결과에 대한 표준 CLR 케이스 표기법을 선택했습니다.

부울 true의 문자열 표현은 부울 true로 정의됩니다.TrueString.

(System에도 비슷한 사례가 있습니다.String: C#은 'string' 유형으로 표시합니다.

Xml의 경우 XmlConvert를 사용할 수 있습니다.ToString 메서드입니다.

간단한 코드로 모든 소문자로 변환할 수 있습니다.

그러나 "참"을 "참"으로 다시 변환하는 것은 그리 간단하지 않습니다.

true.ToString().ToLower() 

xml 출력에 사용합니다.

어떻게 C#과 호환되지 않습니까?부울.구문 분석 및 부울입니다.TryParse는 대소문자를 구분하지 않으며 값을 부울 값과 비교하여 구문 분석을 수행합니다.TrueString 또는 Boolean입니다."True" 및 "False"인 FalseString.

EDIT: 부울을 볼 때.Reflector의 ToString 메서드는 문자열이 하드 코딩되어 있으므로 ToString 메서드는 다음과 같습니다.

public override string ToString()
{
    if (!this)
    {
        return "False";
    }
    return "True";
}

왜 그런지는 이미 설명이 끝났지만, "커스텀" 부울 형식에 관해서는 더 이상 없이는 살 수 없는 확장 방법이 두 가지 있습니다 :-)

public static class BoolExtensions
{
    public static string ToString(this bool? v, string trueString, string falseString, string nullString="Undefined") {
        return v == null ? nullString : v.Value ? trueString : falseString;
    }
    public static string ToString(this bool v, string trueString, string falseString) {
        return ToString(v, trueString, falseString, null);
    }
}

사용법은 사소한 것입니다.다음은 다양한 bool 값을 포르투갈어 표현으로 변환합니다.

string verdadeiro = true.ToString("verdadeiro", "falso");
string falso = false.ToString("verdadeiro", "falso");
bool? v = null;
string nulo = v.ToString("verdadeiro", "falso", "nulo");

이것은 아마도 오래된 VB가 아닌 것 같습니다.쿨한 순일수.ToString이 True 또는 False로 생성되었습니다.

언급URL : https://stackoverflow.com/questions/491334/why-does-boolean-tostring-output-true-and-not-true

반응형