TempData [" sth"]为bool

时间:2014-07-20 11:58:05

标签: asp.net-mvc asp.net-mvc-4 tempdata

没关系:

(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

我明白为什么第二个错误,因为错误信息。但我很困惑为什么编译器不抱怨第一个。 谢谢!

2 个答案:

答案 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