làm thế nào để chuyển đổi một chuỗi thành bool


90

Tôi có một giá trị stringcó thể là "0" hoặc "1" và được đảm bảo rằng nó sẽ không phải là bất kỳ thứ gì khác.

Vì vậy, câu hỏi là: cách tốt nhất, đơn giản nhất và thanh lịch nhất để chuyển đổi này thành a là boolgì?


3
Nếu bất kỳ giá trị bất ngờ có thể ở đầu vào, xem xét để sử dụng TryParse ( stackoverflow.com/questions/18329001/... )
— Michael Freidgeim

Câu trả lời:


172

Thực sự khá đơn giản:

bool b = str == "1";

Cảm ơn! Tôi không thể tin được rằng tôi đã suy nghĩ quá nhiều về điều này
— Grizzasd

79

Bỏ qua các nhu cầu cụ thể của câu hỏi này và mặc dù truyền một chuỗi thành bool không bao giờ là một ý tưởng hay, nhưng có một cách là sử dụng phương thức ToBoolean () trên lớp Convert:

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

hoặc một phương thức mở rộng để thực hiện bất kỳ ánh xạ kỳ lạ nào bạn đang làm:

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!");
        }
    }
}

1
Hành vi của Convert.ToBoolean thể hiện trong stackoverflow.com/questions/7031964/...
— Michael Freidgeim

1
Cảm thấy Boolean.TryParse thích hợp hơn khi cần chuyển đổi nhiều giá trị vì nó không ném FormatExceptionnhư Convert.ToBoolean .
— dùng3613932

48

Tôi biết điều này không trả lời câu hỏi của bạn, mà chỉ để giúp những người khác. Nếu bạn đang cố gắng chuyển đổi chuỗi "true" hoặc "false" thành boolean:

Hãy thử 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!

Cần nó cho một tập lệnh Powershell đọc một số dữ liệu XML và điều này là hoàn hảo!
— Alternatex

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

Hoặc thậm chí tốt hơn, như được đề xuất trong một bình luận bên dưới:

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

39
Tôi coi bất cứ điều gì thuộc dạng x ? true : falsehài hước.
— Kendall Frey

5
bool b = str.Equals("1") Hoạt động tốt và trực quan hơn ngay từ cái nhìn đầu tiên.
— Erik Philips

@ErikPhilips Không trực quan lắm khi Chuỗi của bạn strlà Null và bạn muốn Null giải quyết là False.
— MikeTeeVee

7

Tôi đã thực hiện một thứ gì đó có thể mở rộng hơn một chút, Cõng theo khái niệm của 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));
    }

5

Tôi đã sử dụng mã bên dưới để chuyển đổi một chuỗi thành boolean.

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

Không cần thiết phải gọi Convert.ToInt32 nếu hai khả năng duy nhất là "1" và "0". Nếu bạn muốn xem xét các trường hợp khác, var isTrue = Convert.ToBoolean ("true") == true && Convert.ToBoolean ("1"); // Cả hai đều đúng.
— TamusJRoyce

Nhìn vào câu trả lời của Mohammad Sepahvand bình luận của Michael Freidgeim!
— TamusJRoyce

3

Đây là nỗ lực của tôi về chuỗi dễ tha thứ nhất thành chuyển đổi bool vẫn hữu ích, về cơ bản chỉ khóa ký tự đầu tiên.

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;
    }
}

3
    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));
}

1

Tôi sử dụng cái này:

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");
        }

0

Tôi thích các phương pháp mở rộng và đây là phương pháp tôi sử dụng ...

static class StringHelpers
{
    public static bool ToBoolean(this String input, out bool output)
    {
        //Set the default return value
        output = false;

        //Account for a string that does not need to be processed
        if (input == null || input.Length < 1)
            return false;

        if ((input.Trim().ToLower() == "true") || (input.Trim() == "1"))
            output = true;
        else if ((input.Trim().ToLower() == "false") || (input.Trim() == "0"))
            output = false;
        else
            return false;

        //Return success
        return true;
    }
}

Sau đó, để sử dụng nó, chỉ cần làm một cái gì đó như ...

bool b;
bool myValue;
data = "1";
if (!data.ToBoolean(out b))
  throw new InvalidCastException("Could not cast to bool value from data '" + data + "'.");
else
  myValue = b;  //myValue is True

-1

Nếu bạn muốn kiểm tra xem một chuỗi có phải là Boolean hợp lệ mà không có bất kỳ ngoại lệ nào được đưa ra hay không, bạn có thể thử cách này:

    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");
    }

đầu ra is Boolean và đầu ra cho stringToBool2 là: 'không phải là Boolean'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.