Như tôi đã hiểu, biến lặp lặp lại của C# là không thay đổi.Tại sao Biến Iteration trong câu lệnh C# foreach chỉ đọc?
Có nghĩa là tôi không thể sửa đổi iterator như thế này:
foreach (Position Location in Map)
{
//We want to fudge the position to hide the exact coordinates
Location = Location + Random(); //Compiler Error
Plot(Location);
}
tôi không thể thay đổi biến iterator trực tiếp và thay vào đó, tôi phải sử dụng một vòng lặp for
for (int i = 0; i < Map.Count; i++)
{
Position Location = Map[i];
Location = Location + Random();
Plot(Location);
i = Location;
}
Coming từ một nền C++, tôi thấy foreach như là một thay thế cho vòng lặp for. Nhưng với các hạn chế trên, tôi thường dự phòng sử dụng vòng lặp for.
Tôi tò mò, lý do đằng sau việc làm cho trình lặp không thay đổi là gì?
Edit:
Câu hỏi này là chi tiết của một câu hỏi tò mò và không phải là một câu hỏi mã hóa. Tôi đánh giá cao các câu trả lời mã hóa nhưng tôi không thể đánh dấu chúng là câu trả lời.
Ngoài ra, ví dụ ở trên đã được đơn giản hóa quá mức. Dưới đây là ví dụ về C++ về những gì tôi muốn thực hiện:
// The game's rules:
// - The "Laser Of Death (tm)" moves around the game board from the
// start area (index 0) until the end area (index BoardSize)
// - If the Laser hits a teleporter, destroy that teleporter on the
// board and move the Laser to the square where the teleporter
// points to
// - If the Laser hits a player, deal 15 damage and stop the laser.
for (int i = 0; i < BoardSize; i++)
{
if (GetItem(Board[i]) == Teleporter)
{
TeleportSquare = GetTeleportSquare(Board[i]);
SetItem(Board[i], FreeSpace);
i = TeleportSquare;
}
if (GetItem(Board[i]) == Player)
{
Player.Life -= 15;
break;
}
}
Tôi không thể thực hiện điều này trong lý do C# vì không lặp lại được. Tôi nghĩ (sửa tôi nếu tôi sai), điều này đặc trưng cho thiết kế của foreach bằng ngôn ngữ.
Tôi quan tâm đến lý do tại sao trình vòng lặp foreach là không thay đổi.
Tìm tốt. Tôi ngạc nhiên là tôi chưa bao giờ để ý điều đó trước đây. –
Bạn cũng không thực sự thay đổi phần tử mảng trong ví dụ thứ hai của mình. –
@ Jakob, tôi không thực sự quan tâm đến việc thay đổi phần tử mảng. Tôi quan tâm nhiều hơn đến lý do tại sao trình vòng lặp là bất biến. Tôi đoán tôi cần chỉnh sửa câu hỏi để làm rõ câu hỏi đó. – MrValdez