4

次のコードがあるとします。

Request.QueryString["ids"].Split('|');

クエリ文字列に存在しない場合ids、これは例外をスローします。このタイプの状況を処理するために一般的に受け入れられている方法はありますか?次のすべてのオプションでエラーが発生するのを防ぐことができると思いますが、1つ(または完全に別の方法)の方が一般的に受け入れられているのではないかと思います。

string[] ids = (Request.QueryString["ids"] ?? "").Split('|'); 

また

string[] ids;
if(!String.IsNullOrEmpty(Request.QueryString["ids"]))
{
   ids = Request.QueryString["ids"].Split('|')
}

また

?

これらはすべてうまくいくと思いますが、見た目は醜いです。より良い*方法はありますか?

* better =読みやすく、速く、効率的、または上記のすべて。

4

3 に答える 3

12

これには拡張メソッドを使用するのが好きです:

public static string EmptyIfNull(this string self)
{
    return self ?? "";
}

使用法:

string[] ids = Request.QueryString["ids"].EmptyIfNull().Split('|');
于 2012-12-21T00:39:54.083 に答える
1

個人的には使いたい

string idStr = Request.QueryString["ids"];
ids = idStr == null ? new string[0] : idStr.Split("|");
于 2012-12-21T00:39:46.273 に答える
0
string[] ids = (Request.QueryString["ids"] as string).Split('|');

これは次の場合と同じように失敗しますRequest.QueryString["ids"]

string[] ids;
if(!String.IsNullOrEmpty(Request.QueryString["ids"]))
{
   ids = Request.QueryString["ids"].Split('|')
}

より重く、データ取得ロジックを 2 回呼び出す可能性があります (また、エラーによって副作用が 2 回発生する可能性があります) => 一時を使用してデータを格納しますが、より重くなります。

string[] ids = (Request.QueryString["ids"] ?? "").Split('|'); 

コンパイラが一時的なものを生成するため、間違いなく最も簡単でクリーンで効率的な方法です。

この種の処理に頻繁に遭遇する場合は、流暢な名前と動作を備えた一連のメソッドを使用して、独自の配管ライブラリを構築できます。

于 2012-12-21T00:39:03.743 に答える