.Net:有没有更好的方法来检查对象的属性为空或空字符串?

时间:2009-07-28 20:13:38

标签: .net vb.net

我正在使用FileHelper来生成对象的属性。以下是一个属性的示例:

<FieldOptional(), _
 FieldTrim(TrimMode.Both)> _
 <FieldNullValue(GetType(String), " ")> _
Public StoreNo As String

正如您所看到的,StoreNo将具有值或“”,其中一个业务策略是检查StoreNo是否为空,如果对象的StoreNo为空或null,则检查是否为空,则该记录将不会创建。

我想在类中创建一个HasValue函数来检查对象中的StoreNo和其他属性,但我觉得它是一个黑客。

Public Function HasValue() As Boolean

    Dim _HasValue As Boolean = True

    If StringHelper.IsNullOrBlank(Me.StoreNo) Then
        _HasValue = False
    End If

    Return _HasValue
End Function

我不认为这种方法是理想的解决方案。如果StoreNo被移除或更改为其他内容,该怎么办?检查对象属性的最佳方法是什么?

3 个答案:

答案 0 :(得分:7)

不确定它是否完全回答了您的问题,但您的HasValue功能非常令人费解。它可以简化为以下内容:

Public Function HasValue() As Boolean
    Return Not String.IsNullOrEmpty(Me.StoreNo);
End Function

但是,当BCL中存在String.IsNullOrEmpty时,为什么还要打扰自定义函数?

答案 1 :(得分:3)

String.IsNullOrEmpty()怎么样?

也许我错过了一些东西,这看起来太简单了:)


此外,没有理由编写这样的代码:

if String.IsNullOrEmpty( str ) then
    hasValue = false
end

您已经在评估布尔表达式,因此只需直接指定事物:

hasValue = Not String.IsNullOrEmpty( str )

答案 2 :(得分:2)

您可以使用String.IsNullOrEmpty函数来测试您的字符串。

修改

我错过了你之前提出更广泛的问题。如果您想要的是一种通用类型的检查,可以检查多个属性并应用于相同类型的不同对象,您可能需要考虑扩展方法。例如

public static class VariousTests
{
   public static bool IsValidStoreNumber (this string value)
   {
    if (string.IsNullOrEmpty(value)) return false;

     // Put additional checks here.
   }
}

Note that both the class and method are declared as static.  
Note also the use of "this" in the method's parameter list, followed by the 
object type the method applies to.

这可以让你在任何字符串变量上调用IsValidStoreNumber,就像它是该字符串的方法一样。例如:

string test = "Some Value";
if (test.IsValidStoreNumber() )
{
   // handle case where it is a good store number.  
}
else
{
   // handle case where it is not a good store number.  
}

希望这是一个更有帮助的答案

编辑添加VB版本代码

当我的原始问题使用VB代码时,我意识到我会显示C#代码。这是我的扩展方法示例的VB版本。

Imports System.Runtime.CompilerServices

Module VariousTests
  <Extension()> _
  Public Function IsValidStoreNumber (ByVal value As String) as Boolean
    If string.IsNullOrEmpty(value) Then
      Return False;
    End If

    ' Put additional checks here.
  End Sub
End Module

使用:

Imports VariousTests

Then inside a method :

   Dim test as string  = "Some Value";
   If test.IsValidStoreNumber() Then
      // handle case where it is a good store number.  
   Else
      // handle case where it is not a good store number.  
   End IF