C# 演员阵容中有什么不同
这可能是一个很小的问题,我已经看到了几个不同的Cast变体C# 演员阵容中有什么不同,c#,C#,这可能是一个很小的问题,我已经看到了几个不同的Cast变体 有什么区别 一个比另一个(性能)好吗 这仅仅是偏好的问题吗,代码易读性 示例一: command.ExecuteScalar() as string; (string)command.ExecuteScalar(); 示例二: command.ExecuteScalar() as string; (string)command.ExecuteScalar(); 两者都会对ExecuteScalar()产生不同的影响,因此问题
- 有什么区别
- 一个比另一个(性能)好吗
- 这仅仅是偏好的问题吗,代码易读性
command.ExecuteScalar() as string;
(string)command.ExecuteScalar();
示例二:
command.ExecuteScalar() as string;
(string)command.ExecuteScalar();
两者都会对ExecuteScalar()
产生不同的影响,因此问题是与数据库交互时,一个比另一个更理想?(字符串)命令。如果命令无法强制转换,ExecuteScalar()
将引发异常
command.ExecuteScalar()作为字符串
将只返回null。第一个(command.ExecuteScalar()作为字符串;
)将在运行时尝试将ExecuteScalar()
的结果转换为字符串。如果生成的类型不是字符串
,您将收到null
。as关键字还仅执行引用转换、可为null的转换和装箱转换,因此不能将其直接用于不可为null的值类型
第二个((string)命令.ExecuteScalar();
)将直接转换为字符串
,如果结果值不是字符串
,则引发无效CastException
一个比另一个(性能)好吗
一般来说,如果您知道结果总是字符串,那么使用第二个选项应该可以提供(微不足道的)更好的性能
这仅仅是偏好的问题吗,代码易读性
这就是我进行更强区分的地方。将用作
表明结果可能不是字符串,您将处理null
检查。使用直接强制转换意味着您知道它始终是一个字符串,其他任何内容都是错误,应该引发异常
在我看来,这应该是选择的决定性因素,因为它直接在代码中显示了您的意图。as
将优雅地失败。@kirinthos[displayText](linkUrl)
。还有,你是如何发表评论的,你的代表不到50人。那是标记对话造成的吗?我终于可以发表评论了,它自动将我的答案转换成了评论,我无法编辑/删除,因为我不能做注释,所以最好指出,as
只有在已知要强制转换的类型是引用类型或可为空的值类型时才起作用。as
在值类型的情况下会产生编译器错误(只是澄清“它不起作用”的类型)@JeffMercado刚刚编辑了这些信息。