使用字符串作为bool的最佳方法

时间:2012-11-22 12:53:04

标签: c#

我有这样的方法:

public void Method(bool value)
{
}

现在我想使用从xml文件(* .loadtest)解析的值来调用此方法,该文件是一个字符串:

<ContextParameter Name="paratemeter" Value="True" />

那么,我应该从来电者那里做到这一点:

if(parameter.Equals("True")
    Method(true);
else
    Method(false);

或者我应该重构Method以获取字符串参数并在那里进行检查?

9 个答案:

答案 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;
}
相关问题