0

我有这样的方法:

public void Method(bool value)
{
}

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

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

那么,我应该从调用者那里做到这一点:

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

还是我应该重构Method以获取字符串作为参数并在那里进行检查?

4

9 回答 9

4

我认为你应该保留

  • 从字符串到实际方法参数的转换和

  • 实际的“要完成的工作”

在两种不同的方法中。它使您的方法保持简短,从而使您的代码具有可读性。

于 2012-11-22T12:55:43.787 回答
3

我会用bool.Parse(string)

于 2012-11-22T12:54:28.603 回答
2

bool.Parse除非您对输入有 100% 的控制权,否则切勿使用。

TryParse无论如何,在处理用户输入时始终使用这些方法。

bool result;
if(!bool.TryParse(value, out result))
   throw new Exception("There was a problem with the config.. etc..");

Method(result);
于 2012-11-22T12:56:23.707 回答
1

您的对象将直接由配置填充吗?如果是这样,让它接受一个字符串。否则,分别解析字符串并维护您的“布尔”参数化方法。

我可能会检查您是否获得了一个有效的字符串,例如“True”/“False”,如果没有,则抛出异常。否则有人会提供“真实”,您会将其解释为FALSE.

您可以选择(作为相关点)对您接受的内容相对宽容(例如修剪空白字符串等)

于 2012-11-22T12:56:24.123 回答
1

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

没有。单一责任。该方法不应该是进行参数转换的方法。您可以创建一个接受字符串参数的重载来执行此操作,然后调用接受布尔值的实现,但是您必须为每个需要非字符串配置参数的方法执行此操作。

最好在一个地方进行转换,并将其称为:

bool param = Configuration.GetBoolParameter("ParameterName");
于 2012-11-22T12:56:51.867 回答
1

我更喜欢尽快摆脱字符串。这是 XML 的限制,无需将限制转移到您的方法的“合同”。

至于比较,我想说最强大的是

var parsedBool = parameter.ToUpper() == "TRUE";
于 2012-11-22T12:57:37.780 回答
0
Method(bool.Parse(parameter));
于 2012-11-22T12:55:07.110 回答
0

我会保留“我需要一个布尔值”的合同。

解析 XML,使用上面推荐的方法将该文本值转换为布尔值,然后传递它。

于 2012-11-22T12:55:54.037 回答
0

我永远不会相信这种输入足够安全,可以传递给 bool.Parse 相反,我会做一些更安全的事情,比如这种带有负回退的正解析。

bool getBoolean(string input) {
  var value = false;
  bool.TryParse(input ?? string.Empty,out value);
  return value;
}
于 2012-11-22T13:02:14.873 回答