只是为了整洁起见,我想知道是否可以将Y或N转换为bool类型?就像这样;
bool theanswer = Convert.ToBoolean(input);
较长的版本:
bool theanswer = false;
switch (input)
{
case "y": theanswer = true; break;
case "n": theanswer = false; break
}
只是为了整洁起见,我想知道是否可以将Y或N转换为bool类型?就像这样;
bool theanswer = Convert.ToBoolean(input);
较长的版本:
bool theanswer = false;
switch (input)
{
case "y": theanswer = true; break;
case "n": theanswer = false; break
}
不,这方面没有内置的功能。
然而,鉴于您想将默认值设置为false,您可以直接使用:
bool theAnswer = (input == "y");
(这里括号只是为了清楚起见。)
你可能希望考虑使它不区分大小写,考虑到你的问题文本和你所拥有的代码之间的差异。一种做法是:
bool theAnswer = "y".Equals(input, StringComparison.OrdinalIgnoreCase);
请注意,使用指定的字符串比较可以避免创建新字符串,并且您不需要担心文化问题...除非您当然想执行区分文化的比较。还请注意,我将字面值作为方法调用的“目标”,以避免在输入为null时抛出NullReferenceException。bool
,根据我的第二句话判断,我怀疑在某个时候有一条评论表明他们想默认为false
。当然,这可能不是你的具体情况。 - Jon Skeetbool theanswer = input.ToLower() == "y";
NullReferenceException
在你的代码中始终是一个错误,因此绝对不应该被期望。如果 null 是无效的,则应使用 ArgumentNullException
或合同失败标记。这样更容易追踪。曾经尝试过在没有行号的情况下跟踪 NullReferenceException
的来源吗? - Greg Beechpublic 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.");
}
}
并调用代码:
if (aString.ToBool())
{
// do something
}
input.ToLower()
,那么我至少只会调用它一次。) - Jon Skeetinput
确实可以为null。扩展方法只是语法糖,实际调用等同于if (ExtensionClass.ToBool(aString)){ // do something }
。 - Joshua Webbhttp://msdn.microsoft.com/en-us/library/86hw82a3.aspxlink text
这个怎么样?
bool theanswer = input.Equals("Y", StringComparison.OrdinalIgnoreCase);
或者使用更安全的版本。
bool theanswer = "Y".Equals(input, StringComparison.OrdinalIgnoreCase);
DotNetPerls有一个方便的类,用于解析各种字符串布尔值。
/// <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;
}
}
}
被调用;
BoolParser.GetValue("true")
BoolParser.GetValue("1")
BoolParser.GetValue("0")
通过添加参数重载以接受对象,这可能进一步改进。
还是这个?
bool CastToBoolean(string input)
{
return input.Equals("Y", StringComparison.OrdinalIgnoreCase);
}
我遇到了同样的问题,但是用另一种方式解决了。
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;
Wonea在DotNetPerls中提供了一个“IsTrue”源代码示例。以下是两个更简短的版本:
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";
}
或:
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;
}
如果你想要更简短(虽然不太美观),你可以将它压缩成两行,像这样:
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;
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;
}
}