2010-11-26 16 views
1

私は拡張メソッドとして拡張機能は動作しませんか?私が取るしかしとき...</p> <p>を

public static string TryGetRequestValue(this HttpRequest stringArg, int maxLengthArg) 
{ 
    return null; 
} 

を使用しようとしていると、私は、エラーメッセージなどなど「メソッドTryGetRequestValueなし過負荷」を取得する動作していませんHttpRequest argを出して、それを動作する文字列に変更します。これはなぜですか?

ご迷惑をおかけして申し訳ございません。

+7

キーは** **使用方法にあります。メソッドを呼び出したコードとエラーメッセージの残りの部分も投稿してください。それは何がうまくいかないのかを簡単に理解することができます! :) –

+0

この拡張メソッドをどのように呼び出そうとしていますか? –

+0

また、あなたのメソッドのクラスのシグネチャは何ですか? –

答えて

2

質問の下の私のコメントを参照してくださいが、この声明に基づいて:

私は HttpRequestの引数を取り出し、それが動作 それを文字列に変更する場合が....これはなぜでしょうか?

拡張メソッドの最初のパラメータ(接頭辞this)は、拡張される型を決定します。したがって、このメソッドを呼び出すことが予想方法は、次のようになります。

HttpRequest instanceOfClassBeingExtended = new HttpRequest(); 
string returnValue = instanceOfClassBeingExtended.TryGetRequestValue(10000); 

方法はstringを返し、唯一パラメータ取ります:maxLengthArgを。

あなたが既にこれをよく知っていれば謝ります。例外を投げているコードだけでなく、例外自体もそれを明確にします。

0

のHttpRequestオブジェクトののparamsコレクションは、あなたが直接、いくつかのキーの存在を確認することができないタイプNameValueCollectionののコレクションですので。その後

public static string TryGetRequestValue(this HttpRequest request, string stringArg) 
{ 
    string result = null; 
    string[] keys = request.Params.AllKeys; 
    if(keys.Contains<string>(stringArg)) 
    { 
     result = request.Params.Get(stringArg); 
    } 
    return result; 
} 

:しかし、このクラスを使用すると、キーの存在をチェックし、取得の手段()法による値を取得するためにのLINQを使用することができますキーの配列を返すAllKeys性質を持っています次のようにメソッドを呼び出すことができます。

Request.TryGetRequestValue("someGetParam"); 
関連する問題