namespace MyNamespace
{
public struct MyStruct
{
public string MyString;
public int MyInt;
public bool MyBool;
}
public class MyClass
{
private List<MyStruct> MyPrivateVariable;
public List<MyStruct> MyVariable
{
get
{
if (MyPrivateVariable == null)
{
MyPrivateVariable = new List<MyStruct>();
MyPrivateVariable.Add(new MyStruct());
MyPrivateVariable.Add(new MyStruct());
}
return MyPrivateVariable;
}
}
public void MyLoop()
{
foreach (MyStruct ms in MyVariable)
{
// Doesn't compile, but it works if you execute it through the Immediate window, or in Quickwatch
ms.MyBool = false;
// Compiles, works
MyFunction(ms);
}
}
public void MyFunction(MyStruct ms)
{
ms.MyBool = false;
}
}
}
Des explications raisonnables pour cela?Foreach struct étrange erreur de compilation en C#
Le rendement du compilateur:
Error: Cannot modify members of 'ms' because it is 'foreach iteration variable'
EDIT:
question supplémentaire:
Je viens essayé de changer une chaîne de MyFunction
, et il ne met pas à jour réellement ms
. MAIS: Si je vais sur quickwatch et que j'y assigne la même valeur, cela met à jour ms
. Pourquoi cela se produit-il s'il ne devrait même pas être compilé en premier lieu, ne devrait pas lancer une exception?
EDIT2:
Ok, montre rapide travaille également sur une copie de ms
, c'est pourquoi je peux modifier sa valeur, il ne modifie pas réellement le contenu de MyPrivateVariable
.
Quelle est l'erreur du compilateur? –
Que dit le message du compilateur? – CodingGorilla
quel est le message d'erreur du compilateur? – EJC