как преобразовать строку в bool - PullRequest
74 голосов
/ 16 марта 2012

У меня есть string, который может быть либо «0», либо «1», и гарантируется, что больше ничего не будет.

Так что вопрос в том, что лучше, проще всего.и самый элегантный способ преобразовать это в bool?

Спасибо.

Ответы [ 11 ]

150 голосов
/ 16 марта 2012

Довольно просто:

bool b = str == "1";
68 голосов
/ 03 января 2014

Игнорирование специфических потребностей этого вопроса, и хотя никогда не было бы хорошей идеей приводить строку к bool, одним из способов было бы использование метода ToBoolean () в классе Convert:

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!");
        }
    }
}
36 голосов
/ 01 мая 2015

Я знаю, что это не ответит на ваш вопрос, но поможет другим людям. Если вы пытаетесь преобразовать строки «истина» или «ложь» в логическое значение:

Попробуйте 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!
19 голосов
/ 16 марта 2012
bool b = str.Equals("1")? true : false;

Или даже лучше, как предлагается в комментарии ниже:

bool b = str.Equals("1");
7 голосов
/ 19 февраля 2014

Я сделал что-то более расширяемое, опираясь на концепцию Мухаммеда Сепахванда:

    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));
    }
5 голосов
/ 21 января 2017

Я использовал приведенный ниже код для преобразования строки в логическое значение.

Convert.ToBoolean(Convert.ToInt32(myString));
3 голосов
/ 03 ноября 2015

Вот моя попытка сделать самое простое преобразование строки в 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;
    }
}
2 голосов
/ 07 августа 2017
    private static readonly ICollection<string> PositiveList = new Collection<string> { "Y", "Yes", "T", "True", "1", "OK" };

public static bool ToBoolean(this string input)
{
                return input != null && PositiveList.Any(λ => λ.Equals(input, StringComparison.OrdinalIgnoreCase));
}
0 голосов
/ 04 октября 2018

Если вы хотите проверить, является ли строка допустимым логическим значением без каких-либо исключений, вы можете попробовать это:

    string stringToBool1 = "true";
    string stringToBool2 = "1";
    bool value1;
    if(bool.TryParse(stringToBool1, out value1))
    {
        MessageBox.Show(stringToBool1 + " is Boolean");
    }
    else
    {
        MessageBox.Show(stringToBool1 + " is not Boolean");
    }

output is Boolean, а для stringToBool2 получится: 'not is Boolean'

0 голосов
/ 23 июня 2018

Я использую это:

public static bool ToBoolean(this string input)
        {
            //Account for a string that does not need to be processed
            if (string.IsNullOrEmpty(input))
                return false;

            return (input.Trim().ToLower() == "true") || (input.Trim() == "1");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...