Рейтинг:
5
UJimbo
Сделать цикл foreach по списку элементов :
private void LookForPerson()
{
ObservableCollection<Person> myList = new ObservableCollection<Person>()
{
new Person{ Name="Person 1", Age=21, Country="India", EmailId="some@some.com", JoinedOn=DateTime.Now},
new Person{ Name="Person 2", Age=29, Country="India", EmailId="some@some.com", JoinedOn=DateTime.Now},
new Person{ Name="Person 3", Age=20, Country="India", EmailId="some@some.com", JoinedOn=DateTime.Now},
new Person{ Name="Person 4", Age=22, Country="India", EmailId="some@some.com", JoinedOn=DateTime.Now},
new Person{ Name="Person 5", Age=23, Country="India", EmailId="some@some.com", JoinedOn=DateTime.Now},
};
int n = -1;
foreach (Person item in myList)
{
if (item.Age == 20)
{
n = myList.IndexOf(item);
break;
}
}
}
Индекс будет равен 2, так как элементы хранятся в списке как 0,1,2,3 и т. д.
Manfred Rudolf Bihy
Мой 4!
Близко, но не совсем там. Что происходит в вашем коде, если есть более одного человека в возрасте двадцати лет?
UJimbo
Я использую только этот случай, как и просил ОП :)
Manfred Rudolf Bihy
Все еще не делает того, что хотел ОП. Вы устанавливаете n равным нулю, что будет допустимым индексом. Поэтому, когда не будет найдено ни одного человека в возрасте двадцати лет, ваш код будет предполагать, что первая запись в списке подойдет.
По крайней мере, установите n в недопустимое число для индекса, например -1.
Manfred Rudolf Bihy
Теперь выглядит лучше! У меня 5!
vishal_h
Я пытаюсь это сделать, но он дает мне nullReferenceException и предупреждает меня использовать новое ключевое слово..
если я использовал new like Person item=new Person()...то это дает ошибку в строке foreach(item in MyList)....что мне делать сэр
UJimbo
Используя свой класс Person, попробуйте использовать приведенную выше функцию, n будет равно 2 в конце
UJimbo
человек должен быть человеком при определении ObservableCollection, по какой-то причине код страницы помечает его как html-тег, а затем пытается закрыть его в конце. Вероятно ошибка в веб странице
BobJanova
Я отредактировал ваше решение, чтобы параметры универсального типа не боролись с HTML-тегами.
UJimbo
Спасибо, боб, в какой-то момент мне нужно попасть на rtfm
Рейтинг:
17
Manfred Rudolf Bihy
Если вы всегда хотите получить только один результат сделайте это:
Person agedTwenty = myList.Where<Person>( x => return x.Age == 20; ).Single<Person>();
int index = myList.IndexOf(agedTwenty);
или альтернативно
int index = myList.Where<Person>( x => return x.Age == 20; ).Select<Person,int>( x => myList.IndexOf(x)).Single<int>();
В случае если может быть более одного результата вы бы сделали это:
IEnumerable<Person> allAgedTwenty = myList.Where<Person>( x => return x.Age == 20; );
IEnumerable<int> indices = allAgedTwenty.Select<Person,int>( x => myList.IndexOf(x) );
В первом случае вы получите только один int, а во втором - список int.
с уважением,
- МРБ
fjdiewornncalwe
Вы получите мою пятерку за то, что побудили ОП использовать LINQ для этой цели.
Manfred Rudolf Bihy
Спасибо Маркус,
Я только недавно начал использовать LinQ с тех пор, как мы совсем недавно перешли от .NET 2.0 к 4.0. Должен сказать, что мне это нравится. Это так потрясающе в выражении комбинаций, преобразований и фильтрации. Код, который раньше занимал от 10 до 15 строк, может быть легко выражен в 2-3 строках. И как только вы привыкнете к синтаксису, он уже не будет таким загадочным. :)
BobJanova
5 для хорошего и надлежащего использования LINQ.
[no name]
Хорошо и ясно, мой 5!