List.Find使用结构列表

时间:2018-11-01 00:37:41

标签: c# linq

我正在努力解决这个特定主题。 我有一个struct元素列表,需要在方法中用作参数。

public struct MyStruct
{

    public string F1;
    public string F2;

}

List<MyStruct> NewList = new List<MyStruct>();
NewList.Add(new MyStruct { F1 = "AAA", F2 = "BBB" });
NewList.Add(new MyStruct { F1 = "CCC", F2 = "DDD" });

如果我尝试使用LINQ查找该列表中的项目,则可以使用:     var Element = NewList.Find(x => x.F1 ==“ AAA”);

但是Element返回了我无法转换为列表的内容吗? 我可以使用Element.F1或Element.F2,但是如果我需要将Element本身传递给方法,该怎么办? 另外,如果我尝试将Element定义为:

List<MyStruct> Element = NewList.Find(x => x.F1 == "AAA");

失败!但为什么? 元素不是那个结构吗? .Find搜索一个元素,该元素是在结构字段F1和F2中定义的2个字符串。

如果我使用.FindAll,定义List<MyStruct> Element上的错误似乎消失了? 如何为NewList定义一个元素?

有人可以帮我吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

List<T>.Find仅返回一个元素,而不返回List<T>。您应该将Element变量声明为MyStruct

MyStruct Element = NewList.Find(x => x.F1 == "AAA");

您还应该考虑Find在找不到匹配值时返回存储在列表中的类型的默认值。