在.NET 3.5中的枚举列表上使用List.Find或LINQ

Joh*_*nes 3 linq enums list .net-3.5

为什么当列表不包含我要搜索的元素时,List.Find(以及列表上的LINQ查询)总是返回第一个枚举元素?

场景:

我的枚举:

public enum TestEnum
{
    EnumOne,
    EnumTwo,
    EnumThree
}
Run Code Online (Sandbox Code Playgroud)

我的测试:

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)));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,selectedWithLinq和selectedWithListFind都返回TestEnum.EnumOne.如果我将TestEnum3添加到列表中,它将正确返回.

Dar*_*rov 10

作为TestEnum一个值类型,当列表中没有找到任何元素时,它不能简单地返回null(就像你有一个引用类型数组那样),但它将返回在这种情况下default(TestEnum)等于的值EnumOne.但无论如何你想要实现什么?