C# 如何使用结构的元素在数组中查找结构?

C# 如何使用结构的元素在数组中查找结构?,c#,arrays,struct,C#,Arrays,Struct,例如,假设我有一个结构,它表示一个人,并包含他们的姓名和年龄。我有一个人物数组,现在我想在数组中找到与“John Doe”匹配的人物。做了一些初步的研究之后,我找到了Array.Find,但文档中对它的描述令人困惑。如果有人能帮我,我将不胜感激。试试IEnumerable上的linq扩展方法中的.Single(foo=>foo.bar==“What your want.”) 请参阅:您可以更轻松地使用LINQ。首先使用System.Linq添加,然后编写以下内容: var john = peop

例如,假设我有一个结构,它表示一个人,并包含他们的姓名和年龄。我有一个人物数组,现在我想在数组中找到与“John Doe”匹配的人物。做了一些初步的研究之后,我找到了
Array.Find
,但文档中对它的描述令人困惑。如果有人能帮我,我将不胜感激。

试试IEnumerable上的linq扩展方法中的
.Single(foo=>foo.bar==“What your want.”)


请参阅:

您可以更轻松地使用LINQ。首先使用System.Linq添加
,然后编写以下内容:

var john = people.FirstOrDefault( p => p.Name == "John Doe" );
使用
Array.Find
可以执行以下操作:

var john = Array.Find( people, p => p.Name == "John Doe" );
我通常更喜欢LINQ方法,因为它更直接、更可读,因为您可以直接在数组本身上调用
FirstOrDefault
方法。此外,如果您希望确保只有一个实例匹配或抛出异常,或者使用
First
Single
在未找到任何内容时抛出异常,则可以使用
Single
。当没有找到匹配项时,这些方法的
…Default
版本返回
Default(T)

这是给你的

Array.Find
接受两个参数:要搜索的数组和要在每个元素上运行的谓词

A是任何函数或方法,它接受一个参数(
person
),根据一个条件(
person.Name==“Caleb”
)检查它,并返回true或false

在本例中,
Array.Find
获取人员数组,根据谓词定义的条件一次检查一个人,并返回满足该条件的第一个人

using System;

public class Program
{
    public static void Main()
    {
        var people = new [] {
            new Person("Caleb"),
            new Person("Martin"),
            new Person("Shaun"),
            new Person("Nechemia")
        };

        var result = Array.Find(people, person => person.Name == "Caleb");
        Console.WriteLine(result.Name);
    }
}

public struct Person
{
    public readonly string Name;

    public Person(string name)
    {
        Name = name;
    }
}