variable sirve read que para example configurationsettings bool applicationsettings app c# c#-4.0

sirve - Casting Y o N para bool C#



read config file c# (10)

Sólo por pulcritud, me preguntaba si es posible lanzar Y o N a un bool? Algo como esto;

bool theanswer = Convert.ToBoolean(input);

La versión larga;

bool theanswer = false; switch (input) { case "y": theanswer = true; break; case "n": theanswer = false; break }


¿O esto?

bool CastToBoolean(string input) { return input.Equals("Y", StringComparison.OrdinalIgnoreCase); }


Cree un método de extensión para una cadena que haga algo similar a lo que especifica en el segundo algoritmo, limpiando así su código:

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

y llama al código:

if (aString.ToBool()) { // do something }


Me enfrenté al mismo problema pero lo resolví de otra manera.

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;


No, no hay nada incorporado para esto.

Sin embargo, dado que desea que el valor predeterminado sea falso, solo puede usar:

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

(El corchete es para mayor claridad.)

Sin embargo, es posible que desee considerar que no distinga mayúsculas de minúsculas, dada la diferencia entre el texto de su pregunta y el código que tiene. Una forma de hacer esto:

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

Tenga en cuenta que el uso de la comparación de cadenas especificada evita la creación de una nueva cadena, y significa que no tiene que preocuparse por los problemas culturales ... a menos que quiera realizar una comparación sensible a la cultura, por supuesto. También tenga en cuenta que he puesto el literal como el "objetivo" de la llamada al método para evitar que se NullReferenceException cuando la input es null .


Qué tal esto.

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

o aún versión más segura.

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



DotNetPerls tiene una clase útil para analizar varias cadenas de cadenas.

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

Es llamado por

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

Esto probablemente podría mejorarse aún más agregando una sobrecarga de parámetros para aceptar un objeto.


Wonea dio un ejemplo de fuente "IsTrue" de DotNetPerls. Aquí hay dos versiones más cortas de él:

public static bool IsTrue(string value) { // Avoid exceptions if (value == null) return false; // Remove whitespace from string and lowercase it. value = value.Trim().ToLower(); return value == "true" || value == "t" || value == "1" || value == "yes" || value == "y"; }

O:

private static readonly IReadOnlyCollection<string> LOWER_TRUE_VALUES = new string[] { "true", "t", "1", "yes", "y" }; public static bool IsTrue(string value) { return value != null ? LOWER_TRUE_VALUES.Contains(value.Trim().ToLower()) : false; }

Heck, si quieres ser realmente corto (y feo), puedes colapsarlo en dos líneas como esta:

private static readonly IReadOnlyCollection<string> LOWER_TRUE_VALUES = new string[] { "true", "t", "1", "yes", "y" }; public static bool IsTrue(string value) => value != null ? LOWER_TRUE_VALUES.Contains(value.Trim().ToLower()) : false;


bool theanswer = input.ToLower() == "y";


class Program { void StringInput(string str) { string[] st1 = str.Split('' ''); if (st1 != null) { string a = str.Substring(0, 1); string b=str.Substring(str.Length-1,1); if( a=="^" && b=="^" || a=="{" && b=="}" || a=="[" && b=="]" ||a=="<" && b==">" ||a=="(" && b==")" ) { Console.Write("ok Formate correct"); } else { Console.Write("Sorry incorrect formate..."); } } } static void Main(string[] args) { ubaid: ; Program one = new Program(); Console.Write("For exit Press N "); Console.Write("/n"); Console.Write("Enter your value...="); string ub = Console.ReadLine(); if (ub == "Y" || ub=="y" || ub=="N" || ub=="n" ) { Console.Write("Are your want to Exit Y/N: "); string ui = Console.ReadLine(); if (ui == "Y" || ui=="y") { return; } else { goto ubaid; } } one.StringInput(ub); Console.ReadLine(); goto ubaid; } }