[c#] 문자열을 부울로 변환하는 방법

string“0”또는 “1”이 될 수있는 a 가 있으며 다른 것은 없을 것입니다.

그래서 질문은 : 이것을 변환하는 가장 좋고 간단하며 가장 우아한 방법은 bool무엇입니까?



답변

정말 간단합니다.

bool b = str == "1";


답변

이 질문의 특정 요구 사항을 무시하고 문자열을 부울로 캐스팅하는 것은 좋지 않지만 한 가지 방법은 Convert 클래스에서 ToBoolean () 메서드 를 사용하는 것입니다 .

bool val = Convert.ToBoolean("true");

또는 이상한 매핑을 수행하는 확장 메서드 :

public static class StringExtensions
{
    public static bool ToBoolean(this string value)
    {
        switch (value.ToLower())
        {
            case  "true":
                return true;
            case "t":
                return true;
            case "1":
                return true;
            case "0":
                return false;
            case "false":
                return false;
            case "f":
                return false;
            default:
                throw new InvalidCastException("You can't cast that value to a bool!");
        }
    }
}


답변

나는 이것이 당신의 질문에 대답하는 것이 아니라 단지 다른 사람들을 돕기위한 것임을 압니다. “true”또는 “false”문자열을 부울로 변환하려는 경우 :

Boolean.Parse를 사용해보십시오.

bool val = Boolean.Parse("true"); ==> true
bool val = Boolean.Parse("True"); ==> true
bool val = Boolean.Parse("TRUE"); ==> true
bool val = Boolean.Parse("False"); ==> false
bool val = Boolean.Parse("1"); ==> Exception!
bool val = Boolean.Parse("diffstring"); ==> Exception!


답변

bool b = str.Equals("1")? true : false;

또는 아래 댓글에 제안 된대로 더 좋습니다.

bool b = str.Equals("1");


답변

Mohammad Sepahvand의 개념에 따라 조금 더 확장 가능한 것을 만들었습니다.

    public static bool ToBoolean(this string s)
    {
        string[] trueStrings = { "1", "y" , "yes" , "true" };
        string[] falseStrings = { "0", "n", "no", "false" };


        if (trueStrings.Contains(s, StringComparer.OrdinalIgnoreCase))
            return true;
        if (falseStrings.Contains(s, StringComparer.OrdinalIgnoreCase))
            return false;

        throw new InvalidCastException("only the following are supported for converting strings to boolean: "
            + string.Join(",", trueStrings)
            + " and "
            + string.Join(",", falseStrings));
    }


답변

아래 코드를 사용하여 문자열을 부울로 변환했습니다.

Convert.ToBoolean(Convert.ToInt32(myString));


답변

여기에 여전히 유용한 bool 변환에 대한 가장 관용적 인 문자열에 대한 나의 시도가 있습니다.

public static class StringHelpers
{
    /// <summary>
    /// Convert string to boolean, in a forgiving way.
    /// </summary>
    /// <param name="stringVal">String that should either be "True", "False", "Yes", "No", "T", "F", "Y", "N", "1", "0"</param>
    /// <returns>If the trimmed string is any of the legal values that can be construed as "true", it returns true; False otherwise;</returns>
    public static bool ToBoolFuzzy(this string stringVal)
    {
        string normalizedString = (stringVal?.Trim() ?? "false").ToLowerInvariant();
        bool result = (normalizedString.StartsWith("y")
            || normalizedString.StartsWith("t")
            || normalizedString.StartsWith("1"));
        return result;
    }
}