从xbox360 XNA api方法返回null。不好的做法?

时间:2011-06-24 02:32:33

标签: api methods xna-4.0 xbox360

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

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   匹配游戏玩家被发现。

我错误地认为返回像这样的null对象是不好的做法?我突然怀疑,因为我认为M $开发人员肯定应该知道他们为XNA / Live等服务做了什么,特别是在经过多次迭代之后。

由于

1 个答案:

答案 0 :(得分:1)

您在此处描述了两种不同的情况:

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

值类型 无法为空,这就是为什么您可能会因“未找到”情况而返回-1的原因。您经常无法返回0,因为大多数时间零是有效值。在这种情况下,-1sentinel value

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

这当然是一个完全痛苦的屁股。不要这样做。

而不是检查:

if(foo != null) ...

你会这样做:

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

这是更多的工作,即使某些事情强制执行非零无效,你仍然必须这样做:

if(foo.IsValid) ...

哪个不能真正赢得任何东西。 Plus 你必须编写所有额外的代码来处理你编写的每一个类中的额外状态。

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