92

I have a string that can be either "0" or "1", and it is guaranteed that it won't be anything else.

So the question is: what's the best, simplest and most elegant way to convert this to a bool?

1

12 Answers 12

184

Quite simple indeed:

bool b = str == "1"; 
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! I can't believe how much I was over thinking this
85

Ignoring the specific needs of this question, and while its never a good idea to cast a string to a bool, one way would be to use the ToBoolean() method on the Convert class:

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

or an extension method to do whatever weird mapping you're doing:

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

2 Comments

Behavior of Convert.ToBoolean shown in stackoverflow.com/questions/7031964/…
Feel Boolean.TryParse is preferable when a lot of values need to be converted as it does not throw FormatException like Convert.ToBoolean.
52

I know this doesn't answer your question, but just to help other people. If you are trying to convert "true" or "false" strings to boolean:

Try 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! 

1 Comment

Needed it for a Powershell script reading some XML data and this is perfect!
20
bool b = str.Equals("1")? true : false; 

Or even better, as suggested in a comment below:

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

3 Comments

I consider anything of the form x ? true : false humorous.
bool b = str.Equals("1") Works fine and more intuitive at first glance.
@ErikPhilips Not so intuitive when your String str is Null and you want Null to resolve as False.
8

I made something a little bit more extensible, Piggybacking on Mohammad Sepahvand's concept:

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

Comments

5

I used the below code to convert a string to boolean.

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

2 Comments

It is unnecessary to call Convert.ToInt32 if the only two possibilities are "1" and "0". If you are wanting to consider other cases, var isTrue = Convert.ToBoolean("true") == true && Convert.ToBoolean("1"); // Are both true.
Look at Mohammad Sepahvand answer Michael Freidgeim comment!
3

Here's my attempt at the most forgiving string to bool conversion that is still useful, basically keying off only the first character.

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

Comments

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

Comments

1

I use this:

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

Comments

0

I love extension methods and this is the one I use...

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

Then to use it just do something like...

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 

Comments

0
string sample = ""; bool myBool = Convert.ToBoolean(sample); 

Comments

-1

If you want to test if a string is a valid Boolean without any thrown exceptions you can try this :

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

outputis Boolean and the output for stringToBool2 is : 'is not Boolean'

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.