私は、以下のコードをアプリケーション全体に散らばっています。私は実際にそれを定型化し、それを静的クラスまたはクラスのユーティリティセットに配置したいので、この重複をすべて持たないでください。このコードをどのようにリファクタリングすることができますか?
しかし、関数の小さなビットは、私がそれをリファクタリングする方法を知らないような方法でユニークです。
private void callResponseCallback(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response;
// End the get response operation
response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamResponse);
string responseData = streamReader.ReadToEnd();
streamResponse.Close();
streamReader.Close();
response.Close();
ExpectedResponseType regResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpectedResponseType>(responseData);
if (regResponse.ok == "0")
{
//error - handle the msg
//whether the user not loggin or not exist
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(CustomErrorMessage);
});
}
else
{
//check the variables unique to the ExpectedResponseType and do Stuff here;
}
}
catch (WebException e)
{
// Error treatment
// ...
Debug.WriteLine("error " + e);
}
私はそれがどのクラスであるかもしれないように、「ExpectedResponseType」に合格するかどうかは、ほとんどの好奇心、そして可能なイベントを発射する方法を多分か(つまり、?Tに渡す方法があります) UIスレッドによって実行され、適切に処理されます。
ありがとうございました。
編集: "ExpectedResponseType"または "T"は、サーバーコールの種類ごとにクラスの大きなコレクションです。たとえば、LoginResponse、RegisterResponse、GetFilesResponse、UpdateResponse、DownloadResponseなどがあります。
ここで私は混乱しています。インターフェイスを作成する必要がありますか、あるいは他のC#テクニックがありますか? – Bob
ここにあるTは何でも構いません。それは制約のない型のパラメータです。あなたはC#のジェネリッククラスを読みたいかもしれません。 –
@Bob - ExpectedResponseTypeが不明であることを意味しますか?言い換えればあなたの本当の疑問は、タイプが未知のジェネリックメソッドを呼び出す方法です。それは不可能です - それはジェネリックが避けようとしているものです。 – dice