将验证作为方法或属性实现?

时间:2008-10-09 12:47:48

标签: c#

如果对象数据有效,我有一个需要测试的对象。验证本身将从实例化对象的线程中调用,它看起来像这样:

 {
  if (_step.Equals(string.Empty)) return false;
  if (_type.Equals(string.Empty)) return false;
  if (_setup.Equals(string.Empty)) return false;
  return true;
}

将此作为属性或方法实现会更好吗?为什么?我已经阅读了related question的答案,但我不认为这个具体问题在那里。

3 个答案:

答案 0 :(得分:7)

我个人的观点是:

  • 如果“validate”方法以任何方式改变对象(您的示例没有),那么将其作为方法。
  • 如果验证后对象保持未更改状态,请将其设为属性。

答案 1 :(得分:1)

我会说作为一个财产。

if(something.IsValid) { ...

看起来更好

if(something.IsValid()) { ...

同样来自MSDN的示例:http://msdn.microsoft.com/en-us/library/system.web.ui.page.isvalid(VS.71).aspx

答案 2 :(得分:1)

该代码需要重构。这是你用Java编写代码的方式,而不是用C#编写代码。在C#中,你有运算符重载。

if (_step == "")) return false;
if (_type == "")) return false;
if (_setup == "")) return false;

这是进行比较的惯用方法。你的方式,除了更冗长,在C#中只是出乎意料和不一致。

如果,且仅当时,这些字符串实际上可能是null而不是空,请使用以下代码:

if (string.IsNullOrEmpty(_step)) return false;