乍一看,我会认为它在未修剪的空间方面存在问题......但事实并非如此,作为Boolean.Parse
用途TryParse
,反过来,它会在其中一次尝试中修剪空间:
public static Boolean Parse (String value) {
if (value==null) throw new ArgumentNullException("value");
Contract.EndContractBlock();
Boolean result = false;
if (!TryParse(value, out result)) {
throw new FormatException(Environment.GetResourceString("Format_BadBoolean"));
}
else {
return result;
}
}
public static Boolean TryParse (String value, out Boolean result) {
result = false;
if (value==null) {
return false;
}
// For perf reasons, let's first see if they're equal, then do the
// trim to get rid of white space, and check again.
if (TrueLiteral.Equals(value, StringComparison.OrdinalIgnoreCase)) {
result = true;
return true;
}
if (FalseLiteral.Equals(value,StringComparison.OrdinalIgnoreCase)) {
result = false;
return true;
}
// Special case: Trim whitespace as well as null characters.
value = TrimWhiteSpaceAndNull(value);
if (TrueLiteral.Equals(value, StringComparison.OrdinalIgnoreCase)) {
result = true;
return true;
}
if (FalseLiteral.Equals(value,StringComparison.OrdinalIgnoreCase)) {
result = false;
return true;
}
return false;
}
参考: http ://referencesource.microsoft.com/#mscorlib/system/boolean.cs,e2a8f2e50ecf93c0,references
所以,肯定有其他事情发生。也许格式存在问题,UTF-8、ANSI、ASCII 等。您的要求之一是您需要一个布尔值,这样您就不会有两种情况True
和False
,所以为什么不这样做:
bool result = message.ToLower().Contains("true"); // true or false
编辑:
在阅读了一些评论之后,您似乎期待超出True
orFalse
的情况,在这种情况下,结果可能无效。我建议这样的事情:
var lMessage = message.ToLower();
bool? result = lMessage.Equals("true") ? true : lMessage.Equals("false") ? false : null;
因此,如果消息包含 ,True
则为true
; 如果False
, 它是false
; 否则为 ,null
表示无效消息。然后,您可以检查是否result
是null
,然后显示无效消息或执行其他操作。我不确定你从那里开始的日常工作是什么。