空对象检查

3

有没有办法知道一个对象中的所有属性是否为空。我的对象代表数据库中的字段,我想知道特定记录是否存在。NULL似乎不起作用。


2
需要更多信息。你是如何获取对象的?ADO.Net、Linq-to-Sql、NHibernate还是其他什么? - Joel
我正在使用NHibernate从数据库中提取数据。 - developer
6个回答

5

你是否尝试过检查 DBNull.Value


我正在使用NHibernate来获取数据。你能解释一下DBNull.Value会做什么,如果我的对象是User,我该如何检查它? - developer

3
您可以使用反射技术:
public static bool IsEmptyEntity<T>(T obj)
{
    foreach (var property in typeof(T).GetProperties())
        if (property.GetValue(obj, null) != null)
            return false;
    return true; 
}

使用方法:

    public class MyTestEntity
    {
        public string Str { get; set; }
        public int? Int { get; set; }
    }

MyTestEntity test = new MyTestEntity();
var empty = IsEmptyEntity(test); //returns true

0
我发现有时仅使用 DBNull 检查是不够的。也许不是最纯粹的方法,但将临时检查作为字符串似乎能解决问题。就像这样:
    if ((DBNull.Value != field) &&
        (!string.IsNullOrWhiteSpace(field.ToString())))

0
许多编程语言都使用一种称为 IsEmpty 的方法或属性进行此类检查。在对象集合的水化阶段,设置一个布尔标志以指定对象是否为空。然后,您可以简单地在其他地方使用该属性或方法来检查空对象。
例如:
在水化期间。
bool _isEmpty = false;

if( prop1 is empty && prop2 is empty )
{
  _isEmpty = true;
}
else
{
  _isEmpty = false;
}

然后使用IsEmpty属性

IsEmpty
{
   get { return _isEmpty; }
}

0
如果记录不存在,那么为什么要有一个对象来表示它呢?

我有一个名为“创建用户配置文件”的按钮。我将按钮的可见性属性绑定到配置文件对象上。当我单击“创建用户配置文件”按钮时,我会打开一个构造器窗口,该窗口将创建具有空值的空对象。因此,即使我尚未在数据库中插入任何内容,该按钮也会更改为“编辑用户配置文件”。 - developer
@开发者:我认为更好的设计是在表单上设置一个CreateMode标志。创建配置文件将把标志设置为true。使用该标志来决定是否更改按钮,而不是判断对象是否为空。这样,按钮文本将直接遵循您的意图(如果您正在创建,则设置标志),而不是从副作用中获得(仅当您正在创建时对象为空)。 - John Saunders

0
如果你的对象代表数据库中的字段,那么它很可能是一个集合。如果是这样,你可以使用像myCollection.Any()这样的扩展方法来查看集合中是否有任何对象。这是你所要问的吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接