【问题标题】:TempData["sth"] as boolTempData["sth"] as bool
【发布时间】:2014-07-20 11:58:04
【问题描述】:

没关系:

(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

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

【问题讨论】:

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


    【解决方案1】:

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

    TempData["sortBool"] as bool?

    如果您希望它默认为布尔值而不是可空值,您还可以使用 null-coalescing 来获取默认值,如下所示:

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

    【讨论】:

      【解决方案2】:

      简单的演员阵容就可以了。如果强制转换不起作用,它将引发异常。编译器无法评估强制转换是否有效,因此不会出现编译错误。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 2019-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多