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

C# 将验证作为方法或属性实现?,c#,C#,如果对象数据有效,我有一个对象需要测试。验证本身将从恢复对象的线程调用,如下所示: { if (_step.Equals(string.Empty)) return false; if (_type.Equals(string.Empty)) return false; if (_setup.Equals(string.Empty)) return false; return true; } 将其作为属性或方法实现会更好吗?为什么?我已经阅读了a的答案,但我认为这里没有涉及这

如果对象数据有效,我有一个对象需要测试。验证本身将从恢复对象的线程调用,如下所示:

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

将其作为属性或方法实现会更好吗?为什么?我已经阅读了a的答案,但我认为这里没有涉及这个具体问题。

我想说的是作为一个财产

if(something.IsValid) { ...
看起来好多了

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

还有一个来自MSDN的例子:

我个人的看法是:

  • 如果“validate”方法以任何方式(您的示例没有)改变了对象,那么将其作为一个方法
  • 如果对象在验证后仍然未更改,请将其设置为属性

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

      if (_step == "")) return false;
      if (_type == "")) return false;
      if (_setup == "")) return false;
      
      这是进行比较的惯用方法。你的方式,除了更加冗长之外,在C#中也是出人意料和不一致的

      如果且仅当这些字符串有可能实际上是
      null
      而不是空的,请使用以下内容:

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

      我记得读过一些文章,其中建议在C#中也使用Equals(…),因为有些特定于CLR的东西。当然,我不记得我在哪里读到过这篇文章……是的,网上有好几篇文章声称这是胡说八道(搜索“有效的C#”,除了同一书名的好书外,还发现了好几篇)。然而,它们已经被反复揭穿了。我将创建一个bool arenalls(params object[]parameters);方法来处理那些非常常见的情况。这很好,但是-它没有回答最初的问题。也就是说,使用string.IsNullOrEmpty(stringToCheck)或stringToCheck==string.Empty是最好的选择。Rob,原来的问题已经得到了回答,我个人没有什么要补充的。