Найти элемент в списке < > который содержит значение

Это сильно зависит от того, что такое «что-то». Если вы можете предположить, что время обработки каждой строки аналогично, вы можете сделать простой расчет:

TimePerLine = Elapsed / LinesProcessed
TotalTime = TimePerLine * TotalLines
TimeRemaining = TotalTime - LinesRemaining * TimePerLine
23
задан Hossein Narimani Rad 17 January 2017 в 10:08
поделиться

5 ответов

Либо используйте LINQ:

var value = MyList.First(item => item.name == "foo").value;

(Конечно, это будет только первое совпадение. Есть много вариантов вокруг этого.)

Или используйте Find вместо FindIndex:

var value = MyList.Find(item => item.name == "foo").value;

Я бы настоятельно рекомендовал использовать LINQ - в наши дни это гораздо более идиоматический подход.

(Я бы также предложил следовать соглашениям об именах .NET.)

75
ответ дан Jon Skeet 17 January 2017 в 10:08
поделиться

Вы можете использовать Where для фильтрации и Select для получения желаемого значения.

MyList.Where(i=>i.name == yourName).Select(j=>j.value);
13
ответ дан Hossein Narimani Rad 17 January 2017 в 10:08
поделиться

Я бы использовал .Equals() для сравнения вместо ==.

Примерно так:

MyClass item = MyList.Find(item => item.name.Equals("foo"));

В частности, потому что он дает вам такие опции, как StringComparison, что просто потрясающе. Пример:

MyClass item = MyList.Find(item => item.name.Equals("foo", StringComparison.InvariantCultureIgnoreCase);

Это позволяет вашему коду игнорировать специальные символы, прописные и строчные. Есть еще варианты.

5
ответ дан Peter Mortensen 17 January 2017 в 10:08
поделиться

Использование функции Find - более чистый путь.

MyClass item = MyList.Find(item => item.name == "foo");
if (item != null) // check item isn't null
{
 ....
}
4
ответ дан misak 17 January 2017 в 10:08
поделиться

Enumerable.First возвращает элемент вместо индекса. В обоих случаях вы получите исключение, если в списке не появится соответствующий элемент (ваш исходный код выдаст IndexOutOfBoundsException, когда вы попытаетесь получить элемент с индексом -1, но First выдаст InvalidOperationException).

MyList.First(item => string.Equals("foo", item.name)).value
3
ответ дан Sam Harwell 17 January 2017 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: