来自Swift编程语言,我已经习惯了optional values的范例。这个语言功能有很多很酷的方面,但我特别想知道C#是否具有相同的处理方式,即nil
函数返回值。例如,一个简单的查找函数,它返回给定键的值。在Swift中,处理缺失键的惯用方法是简单地返回nil
。实际上,这可以防止程序员在绝大多数情况下抛出错误或执行错误处理,并且它非常优雅。同样,在Javascript中,我可能只返回undefined
。
从我在MSDN上看到的内容来看,似乎C#程序员通常会在这种情况下支持经典异常,并在try catch块中处理它们。通常情况如此吗?例如,在Nullable对象中包装整数返回值并让函数调用者检查该值是否为null会不常见?这些情况的正统方法是什么?
答案 0 :(得分:3)
例外情况适用于特殊情况,而不适用于常规程序流程。我想我们在同一边。
当您的方法检查可用性和获取资源时,您只需要额外的返回“类型”,如null
。以代码来获取文件的内容:
if (File.Exists(...))
{
return false;
}
string contents = File.ReadAllText(...);
...
return true;
这不需要例外或null
返回值,如果文件在之间删除检查并打开文件,则可以将其视为例外情况。
但是,当尝试从数据库中获取实体时,您需要组合可用性检查并获取资源,以便只需要一个查询。实际上有很多程序员确实返回null
,但由于没有C#法则很难跟踪哪种方法可以做什么。
我个人喜欢bool TryGet(int id, out Entity entity)
样式,它清楚地表明它会进行可用性检查并在找到时获取资源。如果您希望返回null
并希望更明确地了解您的函数的功能,则可以使用Entity GetOrDefault(int id)
作为命名约定。一些框架方法(即Linq)以这种方式命名。
如果返回值类型,返回Nullable<>
可能已经说明了您的方法。要完成这个圈子,C#7将(据我所知)添加non-nullable reference types。
最后,由您(以及您的团队)决定您喜欢的惯例。
答案 1 :(得分:0)