我打算讓一個合格的猜想並嘗試解釋發生了什麼,但不知道RunForCar()
中發生了什麼。
推測這是因爲結果對象是同一個實例。
可能是的。
下面是一個例子。它不會創建Foo
的新實例,但會一遍又一遍地重複使用同一個實例。因此,每當名稱發生更改時,都會更改參考號上的名稱。 list
本身只包含參考,因此如果更改參考名稱,則list
中的所有項目都將被更改。
var list = new List<Foo>();
var result = new Foo();
for(int i = 0; i < 5; i++)
{
result.Name = i.ToString();
list.Add(result);
}
foreach (var foo in list)
{
Console.WriteLine(foo.Name);
}
輸出:
4
4
4
4
4
如果我們不是不喜歡下面的代碼,我們指定result
到新的參考,然後我們離開現有的引用不變。
var list = new List<Foo>();
var result = new Foo();
for(int i = 0; i < 5; i++)
{
result = new Foo()
{
Name = i.ToString()
};
result.Name = i.ToString();
list.Add(result);
}
foreach (var foo in list)
{
Console.WriteLine(foo.Name);
}
輸出:
0
1
2
3
4
有沒有辦法解決?
是的,您可以簡單地爲每個循環創建result
的新實例。不知道更多關於CarResult
或RunForCar
我不能說什麼時候最好創建新的實例。但這裏有一個例子:
IList<CarResult> carResults = new List<CarResult>();
for (int i = 0; i < cars.Count(); i++)
{
result = new CarResult();
result = calculation.RunForCar(
engineSize[i],
yearOfManufacture[i]); // Fixed type-o?
carResults.Add(result);
}
return carResults;
或者,你可以在循環內部有一個局部變量。
IList<CarResult> carResults = new List<CarResult>();
for (int i = 0; i < cars.Count(); i++)
{
var result = new CarResult(); // Will not be accessible outside of loop.
result = calculation.RunForCar(
engineSize[i],
yearOfManufacture[i]); // Fixed type-o?
carResults.Add(result);
}
return carResults;
你可以發佈你的'RunForCar'方法,並且在上面的代碼中,我認爲你有'''錯字。 –
問題中提供的代碼似乎沒問題。您可以通過使用yield return語句簡單地實現代碼(取決於您的方法的返回類型)。請張貼方法簽名和RunForCar方法。 –
根據你描述的行爲,我猜你是在'RunForCar()'裏面重新使用'result'對象,而不是_newing_ up。 – smoksnes