52 votes

Comment utiliser la méthode IndexOf () de la liste <object>

Tous les exemples d'utilisation de la méthode IndexOf() dans List<T> je vois sont des types de chaîne de base. Ce que je veux savoir, c'est comment renvoyer l'index d'un type de liste qui est un objet, basé sur l'une des variables d'objet.

 List<Employee> employeeList = new List<Employee>();
employeeList.Add(new Employee("First","Last",45.00));
 

Je veux trouver l'indice où employeeList.LastName == "Something"

79voto

280Z28 Points 49515
 int index = employeeList.FindIndex(employee => employee.LastName.Equals(somename, StringComparison.Ordinal));
 

Edit: Sans lambdas pour C # 2.0 (l’original n’utilise ni LINQ ni aucune fonctionnalité .NET 3+, seulement la syntaxe lambda en C # 3.0):

 int index = employeeList.FindIndex(
    delegate(Employee employee)
    {
        return employee.LastName.Equals(somename, StringComparison.Ordinal);
    });
 

26voto

Chris Points 326
 public int FindIndex(Predicate<T> match);
 

Utilisation de lambdas:

 employeeList.FindIndex(r => r.LastName.Equals("Something"));
 

Remarque:

 // Returns:
//     The zero-based index of the first occurrence of an element
//     that matches the conditions defined by match, if found; 
//     otherwise, –1.
 

13voto

Ahmed Said Points 3277

vous pouvez le faire en remplaçant la méthode Equals

 class Employee
    {
        string _name;
        string _last;
        double _val;
        public Employee(string name, string last, double  val)
        {
            _name = name;
            _last = last;
            _val = val;
        }
        public override bool Equals(object obj)
        {
            Employee e = obj as Employee;
            return e._name == _name;
        }
    }
 

4voto

Wil P Points 1831

Désolé, encore une bonne mesure :)

 int index = employees.FindIndex(
      delegate(Employee employee)
        {
           return employee.LastName == "Something";
        });
 

Edit: - Exemple complet dans un projet .NET 2.0.

 class Program
{
    class Employee { public string LastName { get; set; } }
    static void Main(string[] args)
    {
        List<Employee> employeeList = new List<Employee>();
        employeeList.Add(new Employee(){LastName="Something"});
        employeeList.Add(new Employee(){LastName="Something Else"});
        int index = employeeList.FindIndex(delegate(Employee employee) 
                           { return employee.LastName.Equals("Something"); });
        Console.WriteLine("Index:{0}", index);
        Console.ReadKey();
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X