-2

对于要响应的方法调用,我一直认为返回空对象是不好的做法。让我们说

Int GetFieldByID( String IDString );

所以

Int m_MyReturnedID = GetFieldByID( "myGamerTag" );

现在,我假设如果找不到 ID,我们可能会返回 -1 然后处理它而不是返回 null 对象,因为这实际上可能意味着内部出现问题。无论如何,我刚刚在 XNA 开发者网站上看到了这个:

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.findgamerbyid.aspx

如你看到的:

返回值

与请求的 ID 匹配的网络玩家,如果未找到匹配的玩家,则返回 null。

我的先入之见是错误的,即返回这样的空对象是不好的做法吗?我突然产生了怀疑,因为我认为 M$ 开发人员绝对应该知道他们在为 XNA/Live 等服务做什么,尤其是在各种迭代之后。

谢谢

4

1 回答 1

1

您在这里描述了两种不同的情况:

  • 返回一个不能为空的值类型(如您的示例中所示)
  • 返回一个引用类型(如您实际链接的 API) - 这也适用于Nullable类型。

类型 不能为 null,这就是您可能会返回-1“未找到”情况的原因。您通常无法返回0,因为大多数时候零是有效值。在这种情况下-1是一个哨兵值

现在,引用引用类型( ) 对象的变量可以为 null(即:不引用任何对象)。但是,您也可以创建引用类型,使其具有表示“无效”的“哨兵状态”。class

当然,这是一个彻头彻尾的痛苦。不要这样做。

而不是检查这个:

if(foo != null) ...

你会这样做:

if(foo != null && foo.IsValid) ...

这是更多的工作,即使某些东西强制执行非空性,你仍然必须这样做:

if(foo.IsValid) ...

这并不能真正为你赢得任何东西。另外,您必须编写所有额外的代码来处理您编写的每个类中的额外状态。

您的理论的实际问题是您认为null如果“内部出现问题”,方法应该返回。在这种情况下,该方法几乎肯定会抛出异常

于 2011-06-24T05:47:55.103 回答