2017-05-17 15 views
5

TryParseを使用して、番号を付ける文字列を解析しました。デフォルト値で変数を初期化するための解決策が必要なので、TryParseが変換に失敗したときに私はデフォルト値を取得します。C#7の変数にデフォルト値を初期化する方法は?

long.TryParse(input.Code, out long Code = 123); 
//Error CS1525 Invalid expression term '=' 

私は、標準の変数からC#7を使用するように、厳密にしたい:ここ

はコードです。

+4

あなたは 'デフォルト値で初期化'を意味しますか? outパラメータの値は、メソッドによって設定されます。エラーが発生した場合に値を設定する場合は、必要なコードを記述する必要があります。これは途中で変更されていません。それはどのようにパラメータが常に働いているのですか –

+0

@PanagiotisKanavos残念ながら私はパラメータを誤解しました。 –

+0

これは言語の観点からは2番目の意味がありました - "なぜ標準化されていないのであれ" _言語に追加されるすべての機能設計と実装が複雑になり、構文を複雑にします。他の部分を他の部分に壊さないように、すべてを実行するだけの時間がありません。 –

答えて

6

outパラメータ自体はデフォルト値を取ることができない一方で、あなたはあなたが単に三元式でoutパラメータを組み合わせてのC#7の単一の式で何をしたいかを達成することができます:何

var code = long.TryParse(input.Code, out long result) ? result : 123; 
4

実行できません.NETランタイムはlong.TryParseの「成功」または「失敗」の何かを知りません。 TryParseにはboolの戻り値があり、TryParseの終了後にはoutという変数が初期化されることがわかります。 trueと「resultには良い値があります」とfalseには「には値がありません」との間には相関がありません。

それを明確にするために、あなたが持っている可能性があり:

static bool NotTryParse(string s, out long result) 
{ 
    return !long.TryParse(s, out result); 
} 

そして今は?あなたのデフォルト値はいつ使用されるべきですか?

+0

ええ..私は変数を誤解したようです! –

+3

@MohsenSarkar何も悪いと感じることはありません... *ほとんどの人は、 "out"変数と全体のby-refを誤解しています。文脈では、 "out"は "ref"と同じですが、コンパイラのいくつかの調整では "definite assignment"となっています。 10回中9回:人々は「ref」が何を意味するのか理解しています。私がここで試そうとした点:http://blog.marcgravell.com/2017/04/spans-and-ref-part-1-ref.html –

関連する問題