这可能是一个微不足道的问题,我已经看到 Cast 的几种不同变体。
示例一:
command.ExecuteScalar() as string;
示例二:
(string)command.ExecuteScalar();
两者都会以不同的方式影响ExecuteScalar()
,所以问题是与数据库交互时哪一个比另一个更理想?
答案 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。