如何识别对象何时为空?

时间:2009-02-25 10:38:26

标签: c#

如果我正在调用一个函数:

    public User GetUserById(int UserId)
    {
    User someUser = new User();

    //Look up this UserId in the database
     ...
    someUser.Name = dbResult["Name"];

    return someUser;
    }

假设我传入的UserId没有与之关联的“用户信息”。

突然间,我传回的'someUser'被实例化,但是空了。检查它是否为“空”的最佳方法是什么,所以我不尝试显示它的数据?

我的穴居人想检查someUser.Name的长度是否大于零。我知道这很糟糕,所以如果你知道我错过了什么 - 我会感激你的帮助!

5 个答案:

答案 0 :(得分:7)

真正的问题是,如果ID无效,为什么GetUserById()会返回未初始化的对象?抛出异常不是更好,或者 - 最坏的情况 - 返回null

答案 1 :(得分:5)

就个人而言,如果该ID不存在,我会返回null或(不太喜欢)我会抛出ArgumentExceptionKeyNotFoundException。这避免了整个问题 - 您只需检查null ...

答案 2 :(得分:4)

考虑到您在问题中的实施

实现一个“isEmpty”方法,检查每个实例变量是否处于未初始化或默认状态(ref为null,数值为零等)。该类应该知道它自己的状态;外部代码将状态从实例中拉出然后对它做逻辑是不好的形式。您还需要处理可能的歧义,例如对于字符串值实例变量,null和zero length是否都被视为“空”。

<强>替代

  1. 返回null表示“没有此类用户”。

  2. 抛出非法参数例外以表示“没有此类用户”。

  3. 使用 NullObject 模式并返回User isNull()true的子类。

答案 3 :(得分:1)

“空”的定义非常不清楚。如果数据库中没有记录,则不返回任何内容是合乎逻辑的。也就是说,如果没有记录,则返回null

答案 4 :(得分:1)

为什么不检查数据库调用的结果,看看是否有任何记录被返回?如果有0个结果,你就会知道没有这样的用户,你根本不需要创建一个User对象。