日期:2014-05-16 浏览次数:20762 次
如果我有一个DataSet
里面有一表三列一行
现在我要循环这个DS第一个表里的行
并改变第三列的值,
循环结束后
再次循环,这次只是输出它们的值
值会改变吗?
?为了证明这个问题,写了这些代码:
?
?
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("a"), new DataColumn("b"), new DataColumn("c") });
DataRow dr = dt.NewRow();
dr["a"] = 1;
dr["b"] = 2;
dr["c"] = 3;
dt.Rows.Add(dr);
ds.Tables.Add(dt);
foreach (DataRow r in dt.Rows)
{
string a = r["a"].ToString();
string b = r["b"].ToString();
string c = r["c"].ToString();
dr["a"] = 111;
}
foreach (DataRow r in dt.Rows)
{
string a = r["a"].ToString();
string b = r["b"].ToString();
string c = r["c"].ToString();
MessageBox.Show(a + "|" + b + "|" + c);
}
事实证明,它最后会输出"111|2|3"
值是会改变的
想象中当该列该行的值改变后,应该要重新将该行赋值给这个DataTable
并把这个DataTable重新赋值给DataSet
然后再次循环值才会改变
?
------------
?
如果是HashTable 呢,改变其中某个Value,值也会变吗?
于是写了这些
?
Hashtable ht = new Hashtable();
ht.Add("a", "a");
ht.Add("b","b");
foreach (string str in ht.Keys)
{
if (str == "b")
{
ht[str] = "bb";
}
}
foreach (string str in ht.Keys)
{
MessageBox.Show(str +"|" +ht[str].ToString());
}
?
?调试时报错:“集合已修改;可能无法执行枚举操作。”
看来Hashtable在循环时是无法修改其值的(修改、删除都不可以)
?而DataSet是可以的?
?
?
?