【问题标题】:Can the "?" symbol be used to cast types in C#? [duplicate]可以“?”符号用于在 C# 中转换类型? [复制]
【发布时间】:2017-10-23 01:08:11
【问题描述】:

我在网上找了一段代码,里面有这行:

new Claim(JwtClaimTypes.EmailVerified, 
     user.EmailConfirmed ? "true" : "false",
     ClaimValueTypes.Boolean)

虽然代码有效,但我不确定该特定行的作用。我知道“?”符号用于使类型无效,但它也可以用于类型转换吗?

【问题讨论】:

  • 这是一个三元运算符,与? 完全不同,@ 表示可以为空的值。此运算符仅适用于布尔值,? 表示如果布尔值为真,该做什么。 : 表示其他情况。

标签: c# .net


【解决方案1】:

它不是用于铸造的。它只是conditional operator,一个简单的语法来执行if-else 代码块。所以如果?之前的表达式返回true,它会执行第一个表达式(?后面的那个)并返回值,如果?之前的表达式返回false,它返回第二个的返回值表达式(后跟:)

因此,在您的情况下,如果表达式 user.EmailConfirmed 的值为 true,则代码将与

new Claim(JwtClaimTypes.EmailVerified,  "true" , ClaimValueTypes.Boolean)

否则(如果是false)

new Claim(JwtClaimTypes.EmailVerified,  "false" , ClaimValueTypes.Boolean)

你也可以在布尔值上调用ToString()方法,然后调用ToLower()方法得到true或false。如果你想尝试,这里是你的做法

new Claim(JwtClaimTypes.EmailVerified, user.EmailConfirmed.ToString().ToLower(),
                                                                ClaimValueTypes.Boolean)

我个人更喜欢第一种方法(条件运算符),但可能用一些常量替换魔术字符串

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 2015-04-12
    • 2018-08-14
    • 2013-09-30
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多