我是C#(.NET 4.0)項目的新僱員,但我來自C/C++背景。我被指示要「普遍改進我們的產品」,並且遇到了一種長達1000行的方法,其中大部分是由單個開關語句組成,每個語句包含15個情況,每個約60行代碼。有沒有辦法重構C#獨有的switch語句?
這個演出之前,我會保持相同的通用格式,但提取的15個功能,然後制定瞭如何根據需要共享/指向局部變量/類的數據成員。不過,我現在可以訪問各種神祕的新工具,我不能動搖這種感覺,即有一種「C#聰明」的方式去實現這一點。
有沒有辦法來重構在C#(4.0)這個switch語句可能不是在C++做什麼?
編輯:以下是代碼的消毒和摘要的形式:
private void DeviceRequest(List<OpRequest> currentOp, double adjTime) {
//local variables
while (/*condition*/)
{
//Some setup
//Some initialization
try
{
switch (OperationType)
{
case Setup:
//Message header setup through 'if-else' statements
//Message sending
//Many nested 'if' checks, a few less 'else's
break;
case Initiate:
//Message header setup through 'if-else' statements
//Message sending
//Many nested 'if' checks, a few less 'else's
break;
case Acquire:
//Message header setup through 'if-else' statements
//Message sending
//Many nested 'if' checks, a few less 'else's
break;
case Measure:
//Message header setup through 'if-else' statements
//Message sending
//Many nested 'if' checks, a few less 'else's
break;
case Reset:
//Message header setup through 'if-else' statements
//Message sending
//Many nested 'if' checks, a few less 'else's
break;
//12 more cases, all fairly similar.
}
}
catch (RunTimeError err)
{
//A few lines of code
}
finally
{
//Objective measure of time passage
}
}
}
告訴我們更多關於開關的情況。您對案件之間的重複有何一般看法? – ChaosPandion
每當你看到一個'switch'語句時,你就知道錯過了一個子類的機會。不幸的是,這個問題過於寬泛,無法提供具體的重構。 – dasblinkenlight
@dasblinkenlight我不是在尋找一個特定的重構,我很好奇,如果有任何功能/關鍵字特殊的C#,用於重構的情況下,我已經描述過。 – HireThisMarine