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

C# Options to explicitly cast an object as a string

我是 C# 的新手,因为我的大部分 Web 开发工作都是在 VB 中完成的。 在 VB 中,DataRow 对象或 Session 对象之类的东西将隐式转换为字符串。我可以说:

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

我很欣赏在 C# 中此转换必须是显式的,所以我的问题是 - 下面的所有三行都按预期编译和工作。如果会话对象为 null,ToString() 将抛出异常,所以我猜该选项较少 'good',因为我必须先检查 null,但这是一个比其他的?非常感谢。

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

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

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

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

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

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

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

如果对象为nullis运算符returns为false,但如果不为null且类型匹配,则将值赋给变量。