मेरे पास एक string"0" या "1" हो सकता है, और यह गारंटी है कि यह कुछ और नहीं होगा।
तो सवाल यह है: यह एक में बदलने के लिए सबसे अच्छा, सरल और सबसे सुंदर तरीका boolक्या है ?
मेरे पास एक string"0" या "1" हो सकता है, और यह गारंटी है कि यह कुछ और नहीं होगा।
तो सवाल यह है: यह एक में बदलने के लिए सबसे अच्छा, सरल और सबसे सुंदर तरीका boolक्या है ?
जवाबों:
वास्तव में काफी सरल:
bool b = str == "1";
इस प्रश्न की विशिष्ट आवश्यकताओं को अनदेखा करना, और जब तक एक बूल के लिए एक स्ट्रिंग कास्ट करने के लिए इसका अच्छा विचार नहीं है, तब तक कन्वर्ट क्लास पर टोबूलियन () पद्धति का उपयोग करने का एक तरीका होगा :
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!");
}
}
}
FormatException तरह नहीं फेंकता है ।
मुझे पता है कि यह आपके सवाल का जवाब नहीं देता, लेकिन सिर्फ दूसरे लोगों की मदद करने के लिए। यदि आप "सच्चे" या "झूठे" तार को बूलियन में बदलने की कोशिश कर रहे हैं:
बूलियन का प्रयास करें
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!
bool b = str.Equals("1")? true : false;
या इससे भी बेहतर, जैसा कि नीचे टिप्पणी में सुझाया गया है:
bool b = str.Equals("1");
x ? true : falseहास्यप्रद मानता हूं ।
bool b = str.Equals("1") पहली नज़र में ठीक और अधिक सहज काम करता है।
strअशक्त है और आप चाहते हैं कि नल को गलत के रूप में हल किया जाए।
मैंने मोहम्मद सिपाहीवंद की अवधारणा पर कुछ ज्यादा ही विस्तारपूर्वक, पिग्गीबैकिंग किया।
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));
}
मैंने स्ट्रिंग को बूलियन में बदलने के लिए नीचे दिए गए कोड का उपयोग किया।
Convert.ToBoolean(Convert.ToInt32(myString));
यहाँ मेरा सबसे क्षमाशील स्ट्रिंग बूल रूपांतरण पर प्रयास है जो अभी भी उपयोगी है, मूल रूप से केवल पहले चरित्र को बंद कर रहा है।
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;
}
}
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));
}
मैं इसका उपयोग करता हूं:
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");
}
मुझे विस्तार के तरीके पसंद हैं और यह वह है जिसका मैं उपयोग करता हूं ...
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;
}
}
फिर इसका उपयोग करने के लिए बस कुछ ऐसा करें ...
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
यदि आप परीक्षण करना चाहते हैं कि क्या कोई स्ट्रिंग बिना किसी फेंके अपवाद के एक वैध बूलियन है तो आप यह कोशिश कर सकते हैं:
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");
}
उत्पादन is Boolean
और stringToBool2 के लिए उत्पादन है: 'बुलियन नहीं है'