演员中的内容与众不同
这个问题在这里已经有了答案:
第一个( 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。