3

これは実際には問題ではないものです。愚かな質問であれば申し訳ありませんが、それは私が興味を持っていることです. 文字列が null でない場合は文字列パラメーターを整数として解析し、そうでない場合は整数を -1 に設定するとします。このステートメントを書くためのより良い方法はありますか:

int id = context.Request["Id"] == null ? -1 : int.Parse(context.Request["Id"]);

文字列を評価してnullかどうかを確認し、再度評価して解析する必要があるのは面倒です。考えてみると、これでオブジェクトが作成され、null でない場合はオブジェクトのプロパティにアクセスできます。次のようなものです:

int id = person == null ? -1 : person.id;

これは受け入れられた慣行ですか?

4

3 に答える 3

12

最初の例では、 null 合体演算子を使用できます。

int id = int.Parse(context.Request["Id"] ?? "-1");

2 番目の例は、 null セーフの逆参照演算子が存在する場合は改善される可能性があり ますが、C# には存在しないため、このアプローチは問題ありません。

int id = person == null ? -1 : person.Id;
于 2012-07-30T19:47:13.547 に答える
3

int.Parse()null 以外の値で失敗する可能性があるかどうかは述べていませんが、null 以外の入力文字列が常に値になるかどうかわからない場合は、次の方法intを使用することもできます。TryParse()

int id;
if (!int.TryParse(context.Request["Id"], out id)
    id = -1;

context.Request["Id"]が null の場合、または に解析できない場合、これは例外をスローしませんint

于 2012-07-30T19:54:35.017 に答える
1

個人的には、次の 2 つのステートメントを使用します。

string tmp = context.Request["Id"];
int id = String.IsNullOrWhitespace(tmp) ? -1 : int.Parse(tmp);

これは、追加の解析なしでこれを処理します。これを 1 行で行うには、(回避しようとしていた) コンテキストの余分なルックアップまたは余分な解析が必要になります。

于 2012-07-30T19:51:30.253 に答える