我有这样的方法:
public void Method(bool value)
{
}
现在我想使用从xml文件(* .loadtest)解析的值来调用此方法,该文件是一个字符串:
<ContextParameter Name="paratemeter" Value="True" />
那么,我应该从来电者那里做到这一点:
if(parameter.Equals("True")
Method(true);
else
Method(false);
或者我应该重构Method
以获取字符串参数并在那里进行检查?
答案 0 :(得分:4)
我认为你应该保持
从字符串转换为实际方法参数和
实际的“要完成的工作”
用两种不同的方法。它使您的方法简短,从而使您的代码可读。
答案 1 :(得分:3)
我会使用bool.Parse(string)
答案 2 :(得分:2)
除非您对输入有100%的控制权,否则永远不要使用bool.Parse
。
无论如何处理用户输入时,始终使用TryParse
方法。
bool result;
if(!bool.TryParse(value, out result))
throw new Exception("There was a problem with the config.. etc..");
Method(result);
答案 3 :(得分:1)
您的对象是否会被配置直接填充?如果是这样,让它接受一个字符串。否则,单独解析字符串并保持“bool”参数化方法。
我可能会检查你是否收到了有效的字符串,例如“真”/“假”,如果不这样做,则抛出异常。否则有人会提供“真实”,你会将其解释为FALSE
。
您可以选择(作为相关点)在您接受的内容中相对宽容(例如修剪空白字符串等)。
答案 4 :(得分:1)
或者我应该重构Method以获取字符串参数并在那里进行检查?
没有。单一责任。该方法不应该是进行参数转换的方法。您可以创建一个接受字符串参数的重载来执行该操作,然后调用接受布尔值的impmlementation,但是您必须为每个需要非字符串配置参数的方法执行此操作。
最好在一个地方进行转换,并将其称为:
bool param = Configuration.GetBoolParameter("ParameterName");
答案 5 :(得分:1)
我更喜欢尽快摆脱弦乐。这是XML的限制,无需将限制转移到方法的“合同”。
至于比较,我认为最强大的就像是
var parsedBool = parameter.ToUpper() == "TRUE";
答案 6 :(得分:0)
Method(bool.Parse(parameter));
答案 7 :(得分:0)
我会保留合同上写着“我需要一个布尔”。
解析XML,使用上面推荐的方法将该文本值转换为bool,并传递给它。
答案 8 :(得分:0)
我永远不会相信这种输入足够安全,只能传递给bool.Parse 相反,我会做一些更安全的失败,就像这种带有负回退的正面解析一样。
bool getBoolean(string input) {
var value = false;
bool.TryParse(input ?? string.Empty,out value);
return value;
}