字符串未被识别为有效的布尔值C#
我收到错误“字符串未被识别为有效的布尔值”,我正在用C#编码,似乎无法找出问题所在。如有任何见解,将不胜感激。这是我失败的代码:字符串未被识别为有效的布尔值C#,c#,C#,我收到错误“字符串未被识别为有效的布尔值”,我正在用C#编码,似乎无法找出问题所在。如有任何见解,将不胜感激。这是我失败的代码: public static SalesInfo Parse(string stringValue) { string[] words; SalesInfo salesInfo = new SalesInfo(); words = StringMethods.ParseCsvString(stringVa
public static SalesInfo Parse(string stringValue)
{
string[] words;
SalesInfo salesInfo = new SalesInfo();
words = StringMethods.ParseCsvString(stringValue.Trim());
salesInfo.ID = int.Parse(words[0]);
salesInfo.Name = words[1];
salesInfo.City = words[2];
salesInfo.Senior = bool.Parse(words[3]);<----Error here
salesInfo.Veteran = bool.Parse(words[4]);
salesInfo.PurDate = Date.Parse(words[5]);
salesInfo.ItemPrice = Double.Parse(words[6]);
salesInfo.Quantity = int.Parse(words[7]);
return salesInfo;
}
publicstaticsalesinfo解析(stringstringvalue)
{
字符串[]个单词;
SalesInfo SalesInfo=新的SalesInfo();
words=StringMethods.ParseCsvString(stringValue.Trim());
salesInfo.ID=int.Parse(字[0]);
salesInfo.Name=words[1];
salesInfo.City=words[2];
salesInfo.Senior=bool.Parse(words[3]);如果其中包含“Y”/“N”,则必须执行类似以下代码示例的操作:
void Method()
{
string arr = new[] { "Y", "n", "N", "y"};
foreach (string value in arr)
{
// If it DOES equal "y", then this is "true"; otherwise "false"
bool boolean = value.Trim().ToLower().Equals("y");
}
}
尝试执行类似于bool.Parse(“Y”)
的操作肯定会引发异常
上面的代码示例的缺点是,如果数据是坏的(即,它包含除“Y”或“N”以外的内容),它将无法检测到
public static SalesInfo Parse(string stringValue)
{
string[] words;
SalesInfo salesInfo = new SalesInfo();
words = StringMethods.ParseCsvString(stringValue.Trim());
salesInfo.ID = int.Parse(words[0]);
salesInfo.Name = words[1];
salesInfo.City = words[2];
// Solution here
salesInfo.Senior = words[3].Trim().ToLower().Equals("y");
salesInfo.Veteran = bool.Parse(words[4]);
salesInfo.PurDate = Date.Parse(words[5]);
salesInfo.ItemPrice = Double.Parse(words[6]);
salesInfo.Quantity = int.Parse(words[7]);
return salesInfo;
}
我也非常喜欢史蒂夫的方法。一个可能的变体如下:
public bool ParseBool(string input)
{
if (input == null)
throw new ArgumentNullException("input");
switch (input.ToLower())
{
case "y":
case "yes":
return true;
case "n":
case "no":
return false;
// If the CSV file is wrong (i.e. it contains "bad" data)
default:
return throw new ArgumentException("bad data - not a bool");
}
}
bool.Parse
将只解析“True”或“False”字符串(不区分大小写)
的MSDN文档显示了可以解析的字符串类型的一个很好的示例
如果您的输入字符串是“真实性”的其他变体,则必须编写自己的解析器。例如:
public static SalesInfo Parse(string stringValue)
{
...cut for brevity...
salesInfo.Senior = ParseBool(words[3]);
return salesInfo;
}
public bool ParseBool(string input)
{
switch (input.ToLower())
{
case "y":
case "yes":
return true;
default:
return false;
}
}
单词[3]
的值是多少?这里的输入是什么…可能是这个的一个可能的副本。它是“Y”或“N”。在这种情况下,错误消息是完全正确的,“Y”和“N”现在感觉自己真的很迟钝。Thanks@Igor我真的只是在演示这个概念,但确实如此。我喜欢这种方法,我投了赞成票。你也可以添加一件事(如果CSV文件有“坏”数据),那就是为“n”、“no”添加一个单独的案例,并让默认案例抛出一个异常,指示数据不正确。@EJoshuaS是的,您肯定希望查看数据以覆盖所有“正常”基础,并确定您希望默认结果是什么,或者是false
或者类似于ArgumentException
。