【发布时间】:2009-11-11 12:38:07
【问题描述】:
当列表不包含我要搜索的元素时,为什么 List.Find(以及列表上的 LINQ 查询)总是返回第一个枚举元素?
场景:
我的枚举:
public enum TestEnum
{
EnumOne,
EnumTwo,
EnumThree
}
我的测试:
var TestEnum1 = TestEnum.EnumOne;
var TestEnum2 = TestEnum.EnumTwo;
var TestEnum3 = TestEnum.EnumThree;
List<TestEnum> testEnumList = new List<TestEnum>();//{ TestEnum1, TestEnum2 };
var selectedWithLinq = (from c in testEnumList where c.Equals(TestEnum3) select c).FirstOrDefault();
var selectedWithListFind = testEnumList.Find(myEnum => TestEnum3.Equals(myEnum)));
在这种情况下 selectedWithLinq 和 selectedWithListFind 都返回 TestEnum.EnumOne。如果我将 TestEnum3 添加到列表中,它将正确返回。
【问题讨论】:
-
List
testEnumList = new List ();是 TestEnum 类型的空列表,您在哪里填充此列表?它不会自动创建一个包含每个枚举值 1 的列表。 -
我认为他在评论中是这样做的;)
-
:) 列表是否为空或是否包含任何元素都没有关系。在我搜索不在枚举列表中的元素的任何情况下,List.Find 似乎总是返回枚举定义的第一个元素。