TempData[ "sth" ] 作为 bool



可以:

(bool)TempData["sortBool"]

这是不可以的:

TempData["sortBool"] as bool

错误提示:

Error   1   The as operator must be used with a reference type or nullable type ('bool' is a non-nullable value type)   C:Usersxye15DesktopCodeChallengeV4CodeChallengeV4MovieKioskControllersHomeController.cs 55  21  MovieKiosk

我明白为什么第二个是错误的,就像错误消息一样简单。但是我很困惑为什么编译器不抱怨第一个。谢谢!

简单的强制转换就可以了。如果强制转换不工作,它将抛出异常。编译器无法判断强制转换是否有效,因此不会出现编译错误。

as操作符做的不仅仅是强制转换。如果强制转换不成功,则返回null。因此,返回类型必须支持null值,这是引用类型和Nullable<T>的情况。as bool的返回类型是bool。此类型不支持null值,最终会出现编译错误。

正如Nico的答案所暗示的那样,如果转换为Nullable<T>,则可以使用as操作符,这意味着您可以这样做:

TempData["sortBool"] as bool?

如果您希望它默认为bool值而不是空值,您也可以使用空合并来获得默认值,如下所示:

TempData["sortBool"] as bool? ?? false

最新更新