我有这段代码(我希望它可以工作,但它失败了)。我真的不知道为什么。请帮忙
static void Main(string[] args)
{
var x = new MyKeyedCollection();
x.Add(new MyType() { Key = 400L, Value = 0.1 });
x.Add(new MyType() { Key = 200L, Value = 0.1 });
x.Add(new MyType() { Key = 100L, Value = 0.1 });
x.Add(new MyType() { Key = 300L, Value = 0.1 });
//foreach (var item in x)
for (int i = 0; i < x.Count; i++)
{
//Debug.WriteLine(item.PriceLevel);
Debug.WriteLine(x[i].Key);
}
}
}
public class MyType
{
public long Key;
public double Value;
}
public class MyKeyedCollection : KeyedCollection<long, MyType>
{
protected override long GetKeyForItem(MyType item)
{
return item.Key;
}
}
例外:
System.Collections.Generic.KeyNotFoundException 未处理
Message=字典中不存在给定的键。
Source=mscorlib StackTrace:在 System.Collections.Generic.Dictionary 的 System.ThrowHelper.ThrowKeyNotFoundException()2.get_Item(TKey key) at System.Collections.ObjectModel.KeyedCollection
2. ...\Program.cs:line 中 KeyedCollectionTest.Program.Main(String[] args) 的get_Item(TKey key) 25 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading .ThreadHelper.ThreadStart() 内部异常:
为什么它会尝试获取 Key 而不是索引?密钥显然很长,而不是 int。我确信我之前使用过 KeyedCollection,它对于长键和 int 索引工作得很好。
我尝试在版本 2、3.5、4、4.5 中编译(使用 VS2012)...
不明白。