IM意識到Eric Lippert's blog post about situation ,但我認爲這是一個不同的情況,因爲該領域immutates本身而不是它的領域。如果Enumerator是隻讀的,你怎麼能解釋調用MoveNext()不會顯示任何效果,並且輸出始終爲0?自我變異只讀結構領域
class SomeClass
{
private List<int> list;
private [readonly] List<int>.Enumerator enumerator;
public SomeClass()
{
list = new List<int>() { 1, 2, 3 };
enumerator = list.GetEnumerator();
}
public int ReadValue()
{
if (enumerator.MoveNext())
return enumerator.Current;
return -1;
}
}
static void Main()
{
SomeClass c = new SomeClass();
int value;
while ((value = c.ReadValue()) > -1)
MessageBox.Show(value.ToString());
}
還是我不能明白爲什麼NoveNext創建一個副本,我不是治療sturct作爲對象 – TakeMeAsAGuest 2011-04-09 10:05:16
和仍然無法明白爲什麼刪除只讀使它按預期執行。順便說一下,如果保持列表的參考.Enumerator作爲枚舉(界面引用類型)其正常執行了。 –
TakeMeAsAGuest
2011-04-09 10:15:58
它似乎使這個副本的任何類型的引用,無論是結構或類。 :| – ohmusama 2011-04-09 11:15:07