没关系:
(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:\Users\xye15\Desktop\CodeChallengeV4\CodeChallengeV4\MovieKiosk\Controllers\HomeController.cs 55 21 MovieKiosk
我明白为什么第二个错误,因为错误信息。但我很困惑为什么编译器不抱怨第一个。 谢谢!
答案 0 :(得分:4)
一个简单的演员阵容很好。如果演员表不起作用,它将抛出异常。编译器无法评估转换是否有效,因此不会出现编译错误。
as
运算符比投射更多。如果演员表未成功,则返回null
。因此,返回类型必须支持null
值,这是引用类型和Nullable<T>
的情况。 as bool
的返回类型为bool
。此类型不支持null
值,最终会出现编译错误。
答案 1 :(得分:1)
正如Nico的回答提示,如果你转换为as
,你可以使用Nullable<T>
运算符。这意味着你可以这样做:
TempData["sortBool"] as bool?
如果您希望它默认为bool值而不是可空,您还可以使用null-coalescing来获取默认值,如下所示:
TempData["sortBool"] as bool? ?? false