可以“?”符号用于在C#中转换类型?

时间:2017-10-23 01:08:12

标签: c# .net

我在网上找到了一段代码:

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

虽然代码有效,但我不确定该特定行是做什么的。我知道“?” symbol用于取消类型,但它是否也可用于转换类型?

1 个答案:

答案 0 :(得分:3)

不适合铸造。它只是conditional operator,是执行if-else代码块的简单语法。因此,如果?之前的表达式返回true,它将执行第一个表达式(后跟?的表达式)并返回值,如果?之前的表达式返回false,它返回第二个表达式的返回值(后跟:

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

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

else(如果是false

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

您也可以在布尔值上调用ToString()方法,然后调用ToLower()方法获取truefalse。如果您想尝试,请按照以下方式进行操作

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

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