Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在列表中查找具有特定值的对象_C#_List_Class_Object - Fatal编程技术网

C# 在列表中查找具有特定值的对象

C# 在列表中查找具有特定值的对象,c#,list,class,object,C#,List,Class,Object,我有这门课: public class Person { public String name; public int score; public float multiplier; public Person(String nameID) { name = nameID; score = 0; multiplier = 1.0f; } } 我有一个包含这些类的列表: private List&l

我有这门课:

public class Person
{
    public String name;
    public int score;
    public float multiplier;

    public Person(String nameID)
    {
        name = nameID;
        score = 0;
        multiplier = 1.0f;
    }
}
我有一个包含这些类的列表:

private List<Person> _people;

您可以使用
IEnumerable的
Single
方法

var score = _people.Single(p => p.name == "example name").score

您可以使用
IEnumerable的
Single
方法

var score = _people.Single(p => p.name == "example name").score
使用LINQ:

_people.FirstOrDefault(c => c.name == "example name")?.score;
只是别忘了使用System.Linq添加
指令对您的
进行编码。还要注意,您还需要使用运算符(
?。
),该运算符用于在执行成员访问之前测试null(
在本例中为score
) 此外,最好使用以下字段而不是字段:

public string Name { get; set; }
使用LINQ:

_people.FirstOrDefault(c => c.name == "example name")?.score;
只是别忘了使用System.Linq添加
指令对您的
进行编码。还要注意,您还需要使用运算符(
?。
),该运算符用于在执行成员访问之前测试null(
在本例中为score
) 此外,最好使用以下字段而不是字段:

public string Name { get; set; }

您可以使用linq查询来获得结果:

int result = _people.FirstOrDefault(p => p.name == "example name").score
如果_peoplelist包含多个名为“example name”的记录,则可以使用where子句并从列表中获取所有结果

var results = _people.Where(p => p.name == "example name");
    foreach(var r in results)
        Console.WriteLine(r.score);
现在,您可以遍历结果以获得所有分数


以下是实现:

您可以使用linq查询来获得结果:

int result = _people.FirstOrDefault(p => p.name == "example name").score
如果_peoplelist包含多个名为“example name”的记录,则可以使用where子句并从列表中获取所有结果

var results = _people.Where(p => p.name == "example name");
    foreach(var r in results)
        Console.WriteLine(r.score);
现在,您可以遍历结果以获得所有分数



以下是实现:

从哪里来的
GetScore
可能重复@RahulAgarwal,这只是我想要从哪里来的示例
GetScore
可能重复@RahulAgarwal,这只是我想要的示例
where
返回一个过滤的
IEnumerable
,没有一个结果。谢谢@Rotem,我做了更正。FirstOrDefault比FirstOrDefault更精确where@Rotem,我使用了
FirstOrDefault
以及
Where
子句。感谢您的建议,其中
返回一个经过过滤的
IEnumerable
,而不是一个结果。感谢@Rotem,我对其进行了更正。FirstOrDefault比FirstOrDefault更精确where@Rotem,我使用了
FirstOrDefault
以及
Where
子句。谢谢你的建议,如果名单上没有这个名字?@Rotem谢谢。检查我的最新答案和
接线员。@S.Akbari谢谢,我会调查Linq。我不熟悉C#,{get;set;}做什么?@JamesA它们是自动实现的属性。阅读此文,如果在列表中找不到姓名?@Rotem,谢谢。检查我的最新答案和
接线员。@S.Akbari谢谢,我会调查Linq。我不熟悉C#,{get;set;}做什么?@JamesA它们是自动实现的属性。阅读此文,如果样本中有一个且只有一个元素,则只能使用单个方法。我认为
name
是玩家的主键。可以存在两个同名玩家吗?有时他们可以。因此,可能没有具有该名称的玩家,因为,例如,他尚未出现在游戏中。仅当样本中有一个且只有一个元素(根据其谓词)时,才能使用
Single
method。我认为
name
是玩家的主键。可以存在两个同名玩家吗?有时他们可以。因此,可能没有这个名字的玩家,因为,例如,他还没有出现在游戏中。