我有这个片段。
List<Frames> FrameList;
其中Frames是一个只包含字符串的类,包括字符串字段“ExerciseID”。
...
void GetFramesForExercise(string exerciseID)
....
if (exerciseID == "3.2.2") {
Console.Write(""); } // quick and dirty to add a breakpoint
if (FramesList[115].ExerciseID.Equals(exerciseID)) {
Console.Write(""); } // quick and dirty to add a breakpoint
frames = (Frames)FramesList.Single(r => r.ExerciseID.Equals(exerciseID));
通过在console.write语句上添加断点,我能够看到exerciseID确实等于“3.2.2”,并且FramesList [115]指向一个ID等于“3.2.2”的Exercise实例。指向的实例已正确启动。
为什么我的查询会抛出InvalidOperationException?
答案 0 :(得分:6)
如果有多个匹配元素,Single
会抛出InvalidOperationException
。 (正如您所检查的那样,至少匹配的那个,这是我可以看到您获得此异常的唯一原因。)
请参阅this page的例外部分。
答案 1 :(得分:3)
答案 2 :(得分:1)
您也可以调用FirstOrDefault,而不是查询单个项目。当您依赖第三方xml文件的值时,该调用不会在您面前抛出异常。
答案 3 :(得分:0)
您应该使用First
,Single
,而您只希望返回一个元素。
frames = (Frames)FramesList.First(r => r.ExerciseID.Equals(exerciseID));