什么在演员,是不同的

Gre*_*reg 2 c#

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

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

示例一:

command.ExecuteScalar() as string;
Run Code Online (Sandbox Code Playgroud)

示例二:

(string)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

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

Ree*_*sey 7

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

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

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

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

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

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

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