代码之家  ›  专栏  ›  技术社区  ›  Matthew Scharley

是否有理由从隐式转换中抛出异常?

  •  6
  • Matthew Scharley  · 技术社区  · 16 年前

    MSDN :

    我面前的具体案例是:

    1. 我有一个函数,它返回一个自定义集合对象(我们将调用它) FooCollection
    2. 此函数可以返回包含单个项的集合,并且 可以从源代码确定是否会发生这种情况
    3. 如果真的发生了这种情况,99.9%的可能性是用户想要单个项目,而不是包含单个项目的集合。

    现在,我正在考虑是否要包含从 => Foo 隐藏这个小的实现细节,但是只有当集合中只有一个项时,这种转换才会起作用。

    Exception

    我觉得值得一提的是 食品收集 没有实现任何接口或实际扩展 Collection

    4 回复  |  直到 16 年前
        1
  •  11
  •   LukeH    16 年前

    我同意这些原则:你不应该从隐式转换中抛出。

    Foo x = (Foo)fooCollection 只是看起来不太对劲。

    为什么不让调用代码担心从 FooCollection Foo

    Foo a = fooCollection[0];
    Foo b = fooCollection.First();
    Foo c = fooCollection.FirstOrDefault();
    // etc
    
        2
  •  1
  •   Thomas Weller    16 年前

    这显然是不好的。 使用异常来实现逻辑!

    FooCollection.FirstOrDefault() ,这将给出null或第一项。

        3
  •  0
  •   Julien Lebosquain    16 年前

    FooCollection Foo

    尽管如此,IMHO演员并不是一个好办法。即使你说不,我也会使用函数,因为即使你不能控制这些类的实现,你至少可以添加扩展方法,比如 Foo ToFoo(this FooCollection collection) 完成工作。

        4
  •  0
  •   Maximilian Mayerl    16 年前

    仅当集合中只有一项时才起作用的隐式共转换?那么,事实上,它大部分时间都不起作用?

    我永远不会让这种转换含蓄。坚持明确的原则。如果使用你函数的程序员想要一个项目,他应该告诉你的类。

    推荐文章