什么在演员,是不同的

时间:2014-08-20 20:56:20

标签: c#

这可能是一个微不足道的问题,我已经看到 Cast 的几种不同变体。

  • 有什么区别?
  • 一个比另一个好(性能)吗?
  • 这只是一个偏好问题,代码易读性吗?

示例一:

command.ExecuteScalar() as string;

示例二:

(string)command.ExecuteScalar();

两者都会以不同的方式影响ExecuteScalar(),所以问题是与数据库交互时哪一个比另一个更理想?

2 个答案:

答案 0 :(得分:7)

第一个(command.ExecuteScalar() as string;)将执行运行时尝试以将ExecuteScalar()的结果转换为字符串。如果结果类型不是string,您将收到null。 as关键字也只执行引用转换,可空转换和装箱转换,因此您无法直接使用非可空值类型。

第二个((string)command.ExecuteScalar();)将直接转换为string,如果结果值不是InvalidCastException则会引发string

  

一个比另一个好(性能)吗?

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

  

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

这是我进行更强分化的地方。使用as表示结果可能不是字符串,您将处理null检查。使用直接投射表明你知道它总是一个字符串,而其他任何东西都是错误的,应该引发异常。

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

答案 1 :(得分:4)

(string)command.ExecuteScalar()如果无法投放command.ExecuteScalar(),则会抛出异常。

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