微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将对象显式转换为字符串的 C# 选项

如何解决将对象显式转换为字符串的 C# 选项

我是 C# 的新手,因为我的大部分 Web 开发工作都是在 VB 中进行的。 在 VB 中,诸如 DaTarow 对象或会话对象之类的东西将隐式转换为字符串。我可以说:

If myDaTarow("name") = "Fred" Then  ...

我很欣赏在 C# 中这个转换必须是显式的,所以我的问题 - 下面的所有三行都按预期编译和工作。如果会话对象为空,则 ToString() 将抛出异常,所以我猜该选项不太“好”,因为我必须首先检查空值,但是一个选项是否比其他选项更有效或被认为更好的 C# 编码实践?非常感谢。

if ((string)Session["test"] == "abc") ...
if (Session["test"] as string == "abc") ...
if (Session["test"].ToString() == "abc") ...

解决方法

这里有很多很好的回应:Direct casting vs 'as' operator?

简而言之,如果 (string)Session["test"] == "abc" 不是字符串,则第一个选项,即 Session["test"] 将抛出 InvalidCastException。如果您可能想在无效转换时抛出错误,请使用此选项。

如果类型转换的对象不是字符串,则第二个选项 Session["test"] as string == "abc" 将返回 null。此选项需要在实际使用结果之前在转换后进行显式空检查。

如果你肯定知道你正在类型转换的对象是一个字符串,你可以使用第一个,如果它失败,你肯定会知道类型转换失败并且更容易调试。如果您不确定对象是否为字符串,您可能需要选择第二个选项。

,

正如上面评论中已经指出的,还有第四种可能性,它适用于最近的编译器版本:

if (Session["test"] is string test && test == "abc")
{
    // will get here only if the field was not null and is "abc"
}

如果对象为 is,则 null 运算符返回 false,但如果它不为 null 且类型匹配,则将该值分配给变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。