Casting Y or N to bool C#

前端 未结 10 2213
故里飘歌
故里飘歌 2021-02-07 05:46

Just for neatness sake I was wondering, whether it\'s possible to cast Y or N to a bool? Something like this;

bool theanswer = Convert.ToBoolean(input);
         


        
相关标签:
10条回答
  • 2021-02-07 06:06

    No, there's nothing built in for this.

    However, given that you want to default to false, you can just use:

    bool theAnswer = (input == "y");
    

    (The bracketing there is just for clarity.)

    You may want to consider making it case-insensitive though, given the difference between the text of your question and the code you've got. One way of doing this:

    bool theAnswer = "y".Equals(input, StringComparison.OrdinalIgnoreCase);
    

    Note that using the specified string comparison avoids creating a new string, and means you don't need to worry about cultural issues... unless you want to perform a culture-sensitive comparison, of course. Also note that I've put the literal as the "target" of the method call to avoid NullReferenceException being thrown when input is null.

    0 讨论(0)
  • 2021-02-07 06:07

    how about this.

    bool theanswer = input.Equals("Y", StringComparison.OrdinalIgnoreCase);
    

    or yet safer version.

    bool theanswer = "Y".Equals(input, StringComparison.OrdinalIgnoreCase);
    
    0 讨论(0)
  • 2021-02-07 06:07

    Or this?

    bool CastToBoolean(string input)
    {
        return input.Equals("Y", StringComparison.OrdinalIgnoreCase);
    }
    
    0 讨论(0)
  • 2021-02-07 06:09

    Create a extension method for string that does something similar to what you specify in the second algorithm, thus cleaning up your code:

    public static bool ToBool(this string input)
    {
        // input will never be null, as you cannot call a method on a null object
        if (input.Equals("y", StringComparison.OrdinalIgnoreCase))
        {
             return true;
        }
        else if (input.Equals("n", StringComparison.OrdinalIgnoreCase))
        {
             return false;
        }
        else
        {
             throw new Exception("The data is not in the correct format.");
        }
    }
    

    and call the code:

    if (aString.ToBool())
    {
         // do something
    }
    
    0 讨论(0)
  • 2021-02-07 06:09

    I faced the same problem but solved other way.

    bool b=true; 
            decimal dec; 
            string CurLine = "";        
            CurLine = sr.ReadLine();
            string[] splitArray = CurLine.Split(new Char[] { '=' });
            splitArray[1] = splitArray[1].Trim();
            if (splitArray[1].Equals("Y") || splitArray[1].Equals("y")) b = true; else b = false;
            CurChADetails.DesignedProfileRawDataDsty1.Commen.IsPad = b;
    
    0 讨论(0)
  • 2021-02-07 06:10

    DotNetPerls has a handy class for parsing various string bools.

    /// <summary>
    /// Parse strings into true or false bools using relaxed parsing rules
    /// </summary>
    public static class BoolParser
    {
        /// <summary>
        /// Get the boolean value for this string
        /// </summary>
        public static bool GetValue(string value)
        {
           return IsTrue(value);
        }
    
        /// <summary>
        /// Determine whether the string is not True
        /// </summary>
        public static bool IsFalse(string value)
        {
           return !IsTrue(value);
        }
    
        /// <summary>
        /// Determine whether the string is equal to True
        /// </summary>
        public static bool IsTrue(string value)
        {
           try
           {
                // 1
                // Avoid exceptions
                if (value == null)
                {
                    return false;
                }
    
                // 2
                // Remove whitespace from string
                value = value.Trim();
    
                // 3
                // Lowercase the string
                value = value.ToLower();
    
                // 4
                // Check for word true
                if (value == "true")
                {
                    return true;
                }
    
                // 5
                // Check for letter true
                if (value == "t")
                {
                    return true;
                }
    
                // 6
                // Check for one
                if (value == "1")
                {
                    return true;
                }
    
                // 7
                // Check for word yes
                if (value == "yes")
                {
                    return true;
                }
    
                // 8
                // Check for letter yes
                if (value == "y")
                {
                    return true;
                }
    
                // 9
                // It is false
                return false;
            }
            catch
            {
                return false;
            }
        }
    }
    

    Is called by;

    BoolParser.GetValue("true")
    BoolParser.GetValue("1")
    BoolParser.GetValue("0")
    

    This could probably be further improved by adding a parameter overload to accept an object.

    0 讨论(0)
提交回复
热议问题