_List<T>
_でIndexOf()
メソッドを使用した例はすべて、基本的な文字列型です。私が知りたいのは、オブジェクト変数の1つに基づいて、オブジェクトであるリスト型のインデックスを返す方法です。
_List<Employee> employeeList = new List<Employee>();
employeeList.Add(new Employee("First","Last",45.00));
_
_employeeList.LastName == "Something"
_のインデックスを見つけたい
int index = employeeList.FindIndex(employee => employee.LastName.Equals(somename, StringComparison.Ordinal));
編集:C#2.0のラムダなし(オリジナルはLINQまたは.NET 3+機能を使用せず、C#3.0のラムダ構文のみを使用):
int index = employeeList.FindIndex(
delegate(Employee employee)
{
return employee.LastName.Equals(somename, StringComparison.Ordinal);
});
public int FindIndex(Predicate<T> match);
ラムダの使用:
employeeList.FindIndex(r => r.LastName.Equals("Something"));
注意:
// Returns:
// The zero-based index of the first occurrence of an element
// that matches the conditions defined by match, if found;
// otherwise, –1.
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;
}
}
申し訳ありませんが、もう1つ良い対策があります:)
int index = employees.FindIndex(
delegate(Employee employee)
{
return employee.LastName == "Something";
});
編集:-.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();
}
}
私はこれが好きです
private List<Person> persons = List<Person>();
public PersonService()
{
persons = new List<Person>() {
new Person { Id = 1, DOB = DateTime.Today, FirstName = "Pawan", LastName = "Shakya" },
new Person { Id = 2, DOB = DateTime.Today, FirstName = "Bibek", LastName = "Pandey" },
new Person { Id = 3, DOB = DateTime.Today, FirstName = "Shrestha", LastName = "Prami" },
new Person { Id = 4, DOB = DateTime.Today, FirstName = "Monika", LastName = "Pandey" },
};
}
public PersonRepository.Interface.Person GetPerson(string lastName)
{
return persons[persons.FindIndex(p=>p.LastName.Equals(lastName, StringComparison.OrdinalIgnoreCase))];
}