来自MSDN:
通过消除不必要的强制转换,隐式转换可以提高源代码的可读性。然而,因为隐式转换可以在没有程序员指定的情况下发生,所以必须注意防止令人不快的意外。一般来说,隐式转换运算符不应该抛出异常,也不应该丢失信息,以便在程序员不知情的情况下安全地使用它们。如果转换运算符不能满足这些条件,则应将其标记为显式。
虽然我不反对任何特定的观点,并且我同意这一切都非常好,但是否有足够的理由来保证打破关于隐式转换不引发异常的部分?
我面前的特殊情况是:
- 我有一个函数,它返回一个自定义集合对象(我们称之为
FooCollection
)。 - 该函数可以返回单个项目的集合,并且可以从源代码中确定是否会发生这种情况。(我的意思是函数调用,而不是函数本身)
- 如果确实发生了,那么用户有 99.9% 的可能性想要该单个项目,而不是包含单个项目的集合。
现在,我正在考虑是否包含来自FooCollection
=>的隐式转换Foo
以隐藏这个小的实现细节,但这种转换只有在集合中有单个项目时才有效。
Exception
在这种情况下可以抛出一个吗?或者我应该使用显式强制转换吗?关于如何处理这个问题的任何其他想法(不,由于实现细节我不能只使用两个函数)?
编辑:我觉得值得注意的是FooCollection
它没有实现任何接口或实际上扩展Collection
名称可能暗示,因此基于 LINQ 的答案是无用的。此外,虽然集合确实实现了数字索引,但它并不是处理集合的最直观方式,因为它主要依赖于命名索引。