變量也必須在該範圍內所定義,或父(外)的範圍。除此之外,在這種情況下使用簡單的for
循環可能會更簡單,並與模塊(%
)運算符結合使用。如果你每24次執行一次你的「特定」代碼,它的寫法就會稍微精確一些。在類似C語言中使用基於1的索引非常尷尬。
for (var count = 0; count < TestDates.Count; count++)
{
var date = TestDates[count];
SomeStuff stuff = null;
if (count % 24 == 0)
{
// runs on 0, 24, 48, ...
stuff = new SomeStuff();
}
// runs on each iteration, 'stuff' will be non-null only if
// previous part was executed.
}
您也可以提取這些分支進入方法,並通過共享狀態作爲參數:
// decide whether this should be outside the loop
// (i.e. keep the state from previous iterations),
// or declared within the `for` loop
var state = new SharedState();
for (var count = 0; count < TestDates.Count; count++)
{
var date = TestDates[count];
if (count % 24 == 0)
{
// runs on 0, 24, 48, ...
ProcessPart1(state);
}
// runs on each iteration
ProcessPart2(state);
}
哪裏SharedState
包含你需要這些部門之間共享任何數據:
class SharedState
{
public int SomeValue { get; set; }
public string SomeOtherValue { get; set; }
}
如果您的ProcessPart1
方法返回一個值,您甚至可以使用三元運算符來簡化代碼:
for (var count = 0; count < TestDates.Count; count++)
{
var date = TestDates[count];
// runs on 0, 24, 48, ...
var someData = (count % 24 == 0) ? Process1(date) : null;
// runs on each iteration
Process2(someData);
}
一種選擇是使國家在父類中的私有字段,但拇指的共同規則是儘量限制你的變量的範圍儘可能地。
當然,如果您發佈了一些在這兩個分支中執行的實際代碼,也許可以稍微更好地重構代碼。
所以,我理解這一點; 'Part_2_Code'使用'Part_1_Code'創建的變量? – Jamiec
一種方法是創建某種Context對象,填充它並在方法之間傳遞它。你說(不要創建新的類),爲什麼你不想創建一個新的類? – Milney
這就是爲什麼人們總是告訴你避免副作用......你能否嘗試將Part_1_code分成兩種方法?一個聲明和初始化的東西,另一個只執行真實的行爲? –