다음 코드가 응용 프로그램 전체에 흩어져 있습니다. 나는 이것을 깔끔하게 만들어서 정적 클래스 나 클래스의 유틸리티 세트에 넣고 싶다. 그래서 나는이 모든 중복을 가지고 있지 않다.어떻게이 코드를 리팩터링 할 수 있습니까?
그러나 함수의 작은 비트는 리팩토링하는 방법을 모르는 독특한 방식입니다.
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 등이 있습니다.
좋아, 뭔가 내가 T의 큰 다양성을 허용 어떻게되어 각 유형에 대한 그래서 당신은 당신의 라인을 따라 뭔가를 부를 것이다 기대했다? 인터페이스를 생성해야합니까? 아니면 다른 C# 기술이 있습니까? – Bob
T는 아무 것도 될 수 없습니다. 제약되지 않은 유형 매개 변수입니다. C#의 제네릭 클래스를 읽어 볼 수도 있습니다. –
@Bob - ExpectedResponseType을 알 수 없습니까? 다른 말로하면 실제 질문은 알 수없는 유형의 제네릭 메소드를 호출하는 것입니다. 그것은 불가능합니다 - 제네릭이 피하려고 의도 한 것입니다. – dice