2011-11-10 13 views
3

私はこのコードをリファクタリングしたいと思います。可能であれば、スイッチを使用して可能でしょうか?それとも、パフォーマンス面で同じですか?ここでC#スイッチを使用できますか?

string rawUrl = context.Request.RawUrl ?? string.Empty; 

if (rawUrl.Contains("mypage.aspx")) 
{ 
} 

if (rawUrl.Contains("mypage2.aspx")) 
{ 
} 

etc.. 
+0

Nnnnnnope .......私はelseifを使用しています。おそらくより良い機能です。 –

+0

スイッチを含むことはできませんが、ページ名の生URLを解析するか、可能であれば、完全なURLにあなたのケースを設定する必要があります – CBRRacer

+0

'else if'を使用できますか?パフォーマンスに役立つもの – tbridge

答えて

3

スイッチのケースは一定値でなければなりません。

string rawUrl = context.Request.RawUrl ?? string.Empty; 

if (rawUrl.Contains("mypage.aspx")) 
{ 
    //code 
} 
else if (rawUrl.Contains("mypage2.aspx")) 
{ 
    //more code 
} 

パフォーマンス(良いです!)心配なら、他に行くための方法です:あなたは/他の場合はそうのように使用することがあります最善の策です。 elseを使用しないときは、同じ機能を持ちますが、elseを追加することで、他のif条件を処理しないようにコードに指示します。条件は10 /場合はelse文が10になるかもしれないが、何が問題ではありませ処理されている、またはそれだけで1

EDITにつながる可能性がある場合のステートメントは10になりますので、10とします。この一部について

思想、あなたがコンテキストオブジェクトを使用していることに気付きました。スイッチステートメントが本当に必要な場合は、次の操作を行うことができます。

string page = context.Request.Url.Segments.Last(); 

switch(page) 
{ 
    case "mypage.aspx": 
     //code 
     break; 
    case "mypage2.aspx": 
     //more code 
     break; 
} 
1

含まれていません。

ページ名だけを分離するようにしてください。そうすることもできます。

switch(pageName) 
{ 
    case "mypage.aspx"; 
     break; 

    case "mypage2.aspx"; 
     break; 
} 
4

正確に等価ではなく、「包含」関係が必要なので、直接入力しないでください。

ただし、そう望むならば、あなたは私が別のString変数に格納し、URLになると仮定するもののうち、ページ名を解析しよう、とStringことに切り替えることで、間接的にそれを行うことができます。例えば

// Get the URL from some external source (wherever you're already getting it from) 
String rawUrl = "http://www.example.com/foo/bar.aspx"; 

// Means of parsing will be dependent on the format in which you expect the URL. 
String page = rawUrl.Substring(rawUrl.LastIndexOf("/") + 1); 

switch (page) { 
    case "bar.aspx": 
     // Do stuff 
     break; 
    case "foo.aspx": 
     // Do stuff 
     break; 
} 

そして、もちろん、塩の粒で、この解析手法を取ってください。この例は、可能であることを示していますが、この解析方法では多くの場合例外がスローされる可能性がありますが、簡潔にするためにこれらのチェックを省略しています。

0

Dictionaryを使用する方が良いと思います。

まず、生のURLからファイル名を抽出します。

次に、Dictionary<string,TValue>を使用してください。

ページへのアクションがほぼ同じ場合は、TValueをページに関連付けられたデータのタイプに設定します。

アクションが非常に異なる場合は、TValueActionなどのデリゲートタイプに設定します。

関連する問題