2017-10-23 3 views
-5

この行がある場合、私はオンラインコードの一部が見つかりました:"?"シンボルはC#で型をキャストするために使われますか?

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

コードは、私は特定の行を行うことを何かわからない動作しますが。私は "?"シンボルは型を無効にするために使用されますが、型を型変換するのにも使用できますか?

+4

と魔法の文字列を置換してしまうあなたが

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

それを行う方法であります'?'とはまったく異なります。これは、null値を象徴しています。この演算子はブール値に対してのみ使用可能であり、 '? 'はブール値が真であれば何をするかを示します。 ':'はそれ以外の場合を意味します。 –

+2

リファレンス:[条件演算子](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator) –

答えて

3

キャスト用ではありません。コードブロックif-elseを実行するのは簡単な構文のconditional operatorです。 ?戻る前に式が真であれば、それは最初の式(?続くもの)を実行し、値を返すと?戻るfalse前式場合、それは(:続く)は、第2の式の戻り値を返し

表現 user.EmailConfirmedの値がある場合はだからあなたの場合

trueコードは他の

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

(それがある場合false

と同じになります

ブール値に対してToString()メソッドを呼び出して、trueまたはfalseになるようにToLower()メソッドを呼び出すこともできます。あなたはそれを試してみたい場合は、ここで私が個人的に最初のアプローチ(条件演算子)を好むが、おそらく三項オペレータのいくつかの定数

関連する問題