我一直认为返回一个null对象对于要响应的方法调用来说是不好的做法。让我们说
Int GetFieldByID( String IDString );
所以
Int m_MyReturnedID = GetFieldByID( "myGamerTag" );
现在,我假设如果找不到ID,我们可能会返回-1然后处理它而不是返回一个null对象,因为这实际上可能意味着内部出现了问题。无论如何,我刚刚在XNA开发者网站上看到了这个:
如你所见:
返回值
网络游戏玩家匹配 请求的ID,如果不是,则返回null 匹配游戏玩家被发现。
我错误地认为返回像这样的null对象是不好的做法?我突然怀疑,因为我认为M $开发人员肯定应该知道他们为XNA / Live等服务做了什么,特别是在经过多次迭代之后。
由于
答案 0 :(得分:1)
您在此处描述了两种不同的情况:
Nullable
类型。 值类型 无法为空,这就是为什么您可能会因“未找到”情况而返回-1
的原因。您经常无法返回0
,因为大多数时间零是有效值。在这种情况下,-1
是sentinel value。
现在引用引用类型(class
)对象的变量可以为空(即:不引用任何宾语)。但是,您也可以创建引用类型,使其具有表示“无效”的“哨兵状态”。
这当然是一个完全痛苦的屁股。不要这样做。
而不是检查:
if(foo != null) ...
你会这样做:
if(foo != null && foo.IsValid) ...
这是更多的工作,即使某些事情强制执行非零无效,你仍然必须这样做:
if(foo.IsValid) ...
哪个不能真正赢得任何东西。 Plus 你必须编写所有额外的代码来处理你编写的每一个类中的额外状态。
您的理论存在的实际问题是,如果“内部出现问题”,方法应返回null
。在这种情况下,该方法几乎可以抛出异常。