I'm trying to use a List<T>
with a custom class of mine, and being able to use methods like Contains()
, Find()
, etc., on the list. I thought I'd just have to overload the operator ==
but apparently, one way of doing that is to use a delegate method with the Find()
...
Note: Right now, I've overloaded the Equals()
method to get the Contains()
method to work, but I still couldn't get the Find()
function to work.
What would be the best way of getting both to work?
I'm using the latest C# /.NET framework version with mono, on linux.
edit: Here's my code
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; } }
}
and how I would like to search my Reponse objects using the find() function...
list.find("statement1"); // would return a Reponse object
Find() will find the element that matches the predicate that you pass as a parameter, so it is not related to Equals() or the == operator.
var element = myList.Find(e => [some condition on e]);
In this case, I have used a lambda expression as a predicate. You might want to read on this. In the case of Find(), your expression should take an element and return a bool.
In your case, that would be:
var reponse = list.Find(r => r.Statement == "statement1")
And to answer the question in the comments, this is the equivalent in .NET 2.0, before lambda expressions were introduced:
var response = list.Find(delegate (Response r) { return r.Statement == "statement1"; });
You can use find with a Predicate as follows:
list.Find(x => x.Id == IdToFind);
This will return the first object in the list which meets the conditions defined by the predicate (ie in my example I am looking for an object with an ID).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With