Выберите единственный объект из списка

В дополнение к предыдущим комментариям ваш код оканчивается на "< / script>". Между "<" есть пробел и "/".

21
задан Daniel 9 April 2009 в 17:50
поделиться

7 ответов

Вы можете использовать IEnumerable.First () или IEnumerable.FirstOrDefault () .

Разница в том, что First () сгенерирует, если элемент не найден (или если ни один элемент не соответствует условиям, если вы используете условия). FirstOrDefault () вернет по умолчанию (T) ( ноль , если это ссылочный тип).

38
ответ дан 29 November 2019 в 06:20
поделиться

Используйте селектор FirstOrDefault.

var list = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var firstEven = list.FirstOrDefault(n => n % 2 == 0);

if (firstEven == 0)
    Console.WriteLine("no even number");
else 
    Console.WriteLine("first even number is {0}", firstEven);

Просто передайте предикат для First или Метод FirstOrDefault , и он с радостью обойдет список и выберет для вас первое совпадение.

Если совпадения нет, FirstOrDefault вернет значение по умолчанию для любого типа данных в списке items.

Надеюсь, это поможет: -)

16
ответ дан 29 November 2019 в 06:20
поделиться
List<string> items = new List<string>();

items.Find(p => p == "blah");

или

items.Find(p => p.Contains("b"));

, но это позволяет вам определять то, что вы ищете, с помощью предиката совпадения ...

Я думаю, если вы говорите о linqToSql, то:

пример поиска учетной записи ...

DataContext dc = new DataContext();

Account item = dc.Accounts.FirstOrDefault(p => p.id == 5);

Если вам нужно убедиться, что есть только 1 элемент (выбрасывает исключение, когда их больше 1)

DataContext dc = new DataContext();

Account item = dc.Accounts.SingleOrDefault(p => p.id == 5);
11
ответ дан 29 November 2019 в 06:20
поделиться
typedef std::string::value_type char_t;

char_t up_char( char_t ch )
{
    return std::use_facet< std::ctype< char_t > >( std::locale() ).toupper( ch );
}

std::string toupper( const std::string &src )
{
    std::string result;
    std::transform( src.begin(), src.end(), std::back_inserter( result ), up_char );
    return result;
}

const std::string src  = "test test TEST";

std::cout << toupper( src );
--121 --- 574308--

Вы можете использовать IEnumerable.First () или IEnumerable.FirstOrDefault () .

Разница в том, что First () сгенерирует, если элемент не найден (или если ни один элемент не соответствует условиям, если вы используете условия). FirstOrDefault () вернет default (T) ( null , если это ссылочный тип).

--121 --- 2547968--
field = myclass.getDeclaredField("myname");
field.setAccessible(true);
field.set(myinstance, newvalue);
--121 --- 2519789--

Может быть, я чего-то здесь упускаю, но обычно вызываю .SingleOrDefault () - это способ возврата либо одного элемента в списке, либо значение по умолчанию (null для ссылочных или обнуляемых типов), если список пуст. It generates an exception if the list contains more than one element.

Use FirstOrDefault() to cover the case where you could have more than one.

3
ответ дан 29 November 2019 в 06:20
поделиться

Просто для завершения ответа. Если вы используете синтаксис LINQ, вы можете просто обернуть его, так как он возвращает IEnumerable :

(from int x in intList
 where x > 5
 select x * 2).FirstOrDefault()
4
ответ дан 29 November 2019 в 06:20
поделиться

Есть два простых способа, в зависимости от того, хотите ли вы иметь дело с исключениями или получить значение по умолчанию.

Вы можете использовать First () или FirstOrDefault () метод расширения для получения первого результата или значение по умолчанию (T) .

var list = new List<int> { 1, 2, 4 };
var result = list.Where(i => i == 3).First(); // throws InvalidOperationException
var result = list.Where(i => i == 3).FirstOrDefault(); // = 0
2
ответ дан 29 November 2019 в 06:20
поделиться

SingleOrDefault () - это то, что вам нужно

приветствия

0
ответ дан 29 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

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