演员中的内容与众不同

这个问题在这里已经有了答案:

  • 直接投射vs'as'运营商? 15个答案
  • 在CLR中使用“as”关键字进行投射

  • 第一个( command.ExecuteScalar() as string; )将执行运行时尝试将ExecuteScalar()的结果转换为字符串。 如果结果类型不是string ,则会收到null 。 as关键字也只能执行引用转换,可空转换和装箱转换,所以你不能直接将它与非空值类型一起使用。

    第二个( (string)command.ExecuteScalar(); )将直接进行string转换,并在结果值不是string InvalidCastException

    比另一个(表演)更好吗?

    一般来说,如果你知道结果总是一个字符串,那么使用第二个选项应该会提供(微不足道的)更好的性能。

    这只是一个偏好问题,代码可读性?

    这是我做出更强大差异化的地方。 as暗示,结果可能不是字符串,并且您将处理null检查。 使用直接转换表明您知道它始终是一个字符串,而其他任何内容都是错误,并应引发异常。

    在我看来,这应该是决定选择的因素,因为它直接在代码中显示你的意图。


    (string)command.ExecuteScalar()将抛出一个异常,如果command.ExecuteScalar()不能转换。

    command.ExecuteScalar() as string将只返回null。

    链接地址: http://www.djcxy.com/p/73735.html

    上一篇: What in the Cast, is different

    下一篇: (int)value or value as int?