如果我正在调用一个函数:
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的长度是否大于零。我知道这很糟糕,所以如果你知道我错过了什么 - 我会感激你的帮助!
答案 0 :(得分:7)
真正的问题是,如果ID无效,为什么GetUserById()
会返回未初始化的对象?抛出异常不是更好,或者 - 最坏的情况 - 返回null
?
答案 1 :(得分:5)
就个人而言,如果该ID不存在,我会返回null
或(不太喜欢)我会抛出ArgumentException
或KeyNotFoundException
。这避免了整个问题 - 您只需检查null
...
答案 2 :(得分:4)
考虑到您在问题中的实施
实现一个“isEmpty”方法,检查每个实例变量是否处于未初始化或默认状态(ref为null,数值为零等)。该类应该知道它自己的状态;外部代码将状态从实例中拉出然后对它做逻辑是不好的形式。您还需要处理可能的歧义,例如对于字符串值实例变量,null和zero length是否都被视为“空”。
<强>替代强>
返回null
表示“没有此类用户”。
抛出非法参数例外以表示“没有此类用户”。
使用 NullObject 模式并返回User
isNull()
为true
的子类。
答案 3 :(得分:1)
“空”的定义非常不清楚。如果数据库中没有记录,则不返回任何内容是合乎逻辑的。也就是说,如果没有记录,则返回null
。
答案 4 :(得分:1)
为什么不检查数据库调用的结果,看看是否有任何记录被返回?如果有0个结果,你就会知道没有这样的用户,你根本不需要创建一个User对象。