我有以下代码段,我通过方法声明中的True
参数传递值False
或PropertyValue
。
public void SetTaskInstance(String PropertyName, String PropertyValue, int row)
{
bool bValue;
try
{
PropertyName = PropertyName.ToUpper();
switch (PropertyName)
{
case "BYPASSRULESENGINE":
m_tInstance.byPassRulesEngine =
System.Boolean.TryParse(PropertyValue.ToString(), out bValue);
break;
}
Console.WriteLine("Invoking method");
}
}
如果我通过True
,则会输出True
。但是,如果我传递False
,参数False
将通过代码传递,但一旦达到break语句,当我将鼠标悬停在m_tInstance.ByPassRulesEngine
上时,我看到bool值已成为True
几乎是神奇的。为什么会这样?
答案 0 :(得分:10)
TryParse的返回值表示解析是否成功。当然,值“false”或“False”是有效的,因此TryParse将返回true。解析后的值本身会写入out bValue
参数。
更改行
m_tInstance.byPassRulesEngine = System.Boolean.TryParse(PropertyValue.ToString(), out bValue);
到
bool parseSuccessful = System.Boolean.TryParse(PropertyValue.ToString(), out bValue);
if (parseSuccessful)
{
m_tInstance.byPassRulesEngine = bValue;
}
所有TryParse方法都以这种方式运行。所以在这里阅读MSDN上的TryParse文档: http://msdn.microsoft.com/en-us/library/system.boolean.tryparse.aspx
答案 1 :(得分:0)
看看msdn
转换结果存储在输出变量(您的bValue
)
当此方法返回时,如果转换成功,则包含true 如果value等于Boolean.TrueString,如果value是,则返回false 相当于FalseString。如果转换失败,则包含false。 如果value为null或不等于,则转换失败 TrueString或FalseString字段的值。
答案 2 :(得分:0)
让我解释为什么你总能得到真正的价值:
函数System.Boolean.TryParse
如果能成功完成转换,则返回true,从String到Boolean。
所以在你的例子中,它总是如此。
CarstenSchütte已经提供了解决方案代码。