私はこのコードをリファクタリングしたいと思います。可能であれば、スイッチを使用して可能でしょうか?それとも、パフォーマンス面で同じですか?ここでC#スイッチを使用できますか?
string rawUrl = context.Request.RawUrl ?? string.Empty;
if (rawUrl.Contains("mypage.aspx"))
{
}
if (rawUrl.Contains("mypage2.aspx"))
{
}
etc..
私はこのコードをリファクタリングしたいと思います。可能であれば、スイッチを使用して可能でしょうか?それとも、パフォーマンス面で同じですか?ここでC#スイッチを使用できますか?
string rawUrl = context.Request.RawUrl ?? string.Empty;
if (rawUrl.Contains("mypage.aspx"))
{
}
if (rawUrl.Contains("mypage2.aspx"))
{
}
etc..
スイッチのケースは一定値でなければなりません。
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;
}
含まれていません。
ページ名だけを分離するようにしてください。そうすることもできます。
switch(pageName)
{
case "mypage.aspx";
break;
case "mypage2.aspx";
break;
}
正確に等価ではなく、「包含」関係が必要なので、直接入力しないでください。
ただし、そう望むならば、あなたは私が別の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;
}
そして、もちろん、塩の粒で、この解析手法を取ってください。この例は、可能であることを示していますが、この解析方法では多くの場合例外がスローされる可能性がありますが、簡潔にするためにこれらのチェックを省略しています。
Dictionary
を使用する方が良いと思います。
まず、生のURLからファイル名を抽出します。
次に、Dictionary<string,TValue>
を使用してください。
ページへのアクションがほぼ同じ場合は、TValue
をページに関連付けられたデータのタイプに設定します。
アクションが非常に異なる場合は、TValue
をAction
などのデリゲートタイプに設定します。
Nnnnnnope .......私はelseifを使用しています。おそらくより良い機能です。 –
スイッチを含むことはできませんが、ページ名の生URLを解析するか、可能であれば、完全なURLにあなたのケースを設定する必要があります – CBRRacer
'else if'を使用できますか?パフォーマンスに役立つもの – tbridge