为什么 "foreach" 循环 returns 键而 "indexer" returns 来自 NameValueCollection 的值
Why "foreach" loop returns Key while "indexer" returns Value from a NameValueCollection
我有一个包含多个项目的 NameValueCollection。当我尝试从该集合中检索值时,它 returns 我从集合
中获取 Key
NameValueCollection col= new NameValueCollection();
col.Add("Item1", "Foo");
col.Add("Item2", "Bar");
col.Add("Item3", "Pooh");
col.Add("Item4", "Car");
foreach (string val in col)
{
if (val == "Item3") //val contains the Key from the collection
{ break; }
}
而另一方面,如果我尝试在 for 循环中从索引器中检索值,那么它 returns 我是集合 [=] 中的 Value 16=]
for (int i = 0; i < col.Count; i++)
{
string val = col[i];
if (val == "Pooh") //val contains the 'Value' from the NameValueCollection
{
break;
}
}
为什么这些不同类型的循环有不同类型的结果?
如果我们查看 C# 源代码,就会明白为什么会发生这种情况:
/// <devdoc>
/// <para>Represents the entry at the specified index of the <see cref='System.Collections.Specialized.NameValueCollection'/>.</para>
/// </devdoc>
public String this[int index] {
get
{
return Get(index);
}
}
索引器,您在循环中使用 i 变量访问的内容,returns 该索引处的值。
/// <devdoc>
/// <para>Returns an enumerator that can iterate through the <see cref='System.Collections.Specialized.NameObjectCollectionBase'/>.</para>
/// </devdoc>
public virtual IEnumerator GetEnumerator() {
return new NameObjectKeysEnumerator(this);
}
枚举器,使用 foreach
语句时得到的,为您提供 NameValueCollection
.
的键列表
Represents a collection of associated String keys and String values
that can be accessed either with the key or with the index.
ForEach 访问字符串键
col[val] 将通过键
访问值
第二个你通过索引访问值
我有一个包含多个项目的 NameValueCollection。当我尝试从该集合中检索值时,它 returns 我从集合
中获取 KeyNameValueCollection col= new NameValueCollection();
col.Add("Item1", "Foo");
col.Add("Item2", "Bar");
col.Add("Item3", "Pooh");
col.Add("Item4", "Car");
foreach (string val in col)
{
if (val == "Item3") //val contains the Key from the collection
{ break; }
}
而另一方面,如果我尝试在 for 循环中从索引器中检索值,那么它 returns 我是集合 [=] 中的 Value 16=]
for (int i = 0; i < col.Count; i++)
{
string val = col[i];
if (val == "Pooh") //val contains the 'Value' from the NameValueCollection
{
break;
}
}
为什么这些不同类型的循环有不同类型的结果?
如果我们查看 C# 源代码,就会明白为什么会发生这种情况:
/// <devdoc>
/// <para>Represents the entry at the specified index of the <see cref='System.Collections.Specialized.NameValueCollection'/>.</para>
/// </devdoc>
public String this[int index] {
get
{
return Get(index);
}
}
索引器,您在循环中使用 i 变量访问的内容,returns 该索引处的值。
/// <devdoc>
/// <para>Returns an enumerator that can iterate through the <see cref='System.Collections.Specialized.NameObjectCollectionBase'/>.</para>
/// </devdoc>
public virtual IEnumerator GetEnumerator() {
return new NameObjectKeysEnumerator(this);
}
枚举器,使用 foreach
语句时得到的,为您提供 NameValueCollection
.
Represents a collection of associated String keys and String values that can be accessed either with the key or with the index.
ForEach 访问字符串键
col[val] 将通过键
第二个你通过索引访问值