gpt4 book ai didi

C# - 将 List.Find() 与自定义对象一起使用

转载 作者:IT王子 更新时间:2023-10-29 03:57:59 25 4
gpt4 key购买 nike

我正在尝试使用 List<T>使用我的自定义类,并能够使用类似 Contains() 的方法, Find()等,在列表中。我以为我只需要重载运算符 ==但显然,一种方法是将委托(delegate)方法与 Find() 一起使用...

注意:现在,我已经重载了 Equals()获取Contains()的方法工作方法,但我仍然无法获得 Find()功能发挥作用。

让这两者发挥作用的最佳方式是什么?

我在 Linux 上使用带有单声道的最新 C#/.NET 框架版本。

编辑:这是我的代码

using System;
namespace GuerreDesClans
{
public class Reponse : IEquatable<Reponse>
{
public Reponse ()
{
m_statement = string.Empty;
m_pointage = 0;
}

public Reponse (string statement, int pointage)
{
m_pointage = pointage;
m_statement = statement;
}


/*
* attributs privés
*/

private string m_statement;
private int m_pointage;


/*
* properties
*/

public string Statement {
get { return m_statement; }
set { m_statement = value; }
}

public int Pointage {
get { return m_pointage; }
set { m_pointage = value; }
}

/*
* Equatable
*/

public bool Equals (Reponse other)
{
if (this.m_statement == other.m_statement)
return true;
else
return false;
}
}

以及我想如何使用 find() 函数搜索我的 Reponse 对象...

list.find("statement1"); // would return a Reponse object

最佳答案

Find() 将找到与您作为参数传递的谓词相匹配的元素,因此它与 Equals() 或 == 运算符无关。

var element = myList.Find(e => [some condition on e]);

在这种情况下,我使用了 lambda expression作为谓词。你可能想阅读这个。对于 Find(),您的表达式应采用一个元素并返回一个 bool 值。

在您的情况下,这将是:

var reponse = list.Find(r => r.Statement == "statement1")

为了回答评论中的问题,这在 .NET 2.0 中是等效的,在引入 lambda 表达式之前:

var response = list.Find(delegate (Response r) {
return r.Statement == "statement1";
});

关于C# - 将 List<T>.Find() 与自定义对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com