В заголовке отчасти говорится все это. Я просто, может казаться, не нахожу a DictionaryOrDefault
\ ListOrDefault
\ CollectionOrDefault
опция.
Есть ли такой метод? Если не, как, я делаю это:
MyClass myObject = MyDictionary
.SingleOrDefault(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
else
return false;
}).Key;
если существует больше чем одно соответствие? (Я получаю execption, потому что SingleOrDefault только предназначен для единственных результатов (вообразите это!).)
Угадайте, что я должен был быть более ясным (хотя where
ответы выглядят хорошими).
У меня есть вышеупомянутый оператор. Я изменил свою программу так, чтобы она не всегда возвращалась 1 (может быть несколько значений, которые соответствуют одному ключу). Это перестало работать так, я ищу набор, который будет возвращен (а не всего один объект).
Вы можете использовать IENumerable
Если ваше намерение вернуть первый, соответствующий предикату.
В противном случае вы просто смотрите в IEnumerable
Расширение LINQ, который вернет все элементы, которые соответствуют прошедшему предикату. Это вернет пустой IEnumerable
, если никаких элементов совпадает с предикатом, в какой момент, если вам действительно нужно значение, чтобы быть нулевым, вы можете просто посмотреть, если что-нибудь в нем.
var res = MyDictionary.Where(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
return false;
});
if (!res.Any())
res = null;
Тогда, если вы абсолютно нуждаетесь в его списке, вы можете просто позвонить
res.ToList();
Обратите внимание, что если вы на самом деле манипулируете словарь
, RES
будет содержать keyvaluepair
.
, если вы сделаете что-то вроде
var mylist = obj.Where(x=>x.attr1 == 4);
, вы можете проверить, было ли что-то возвращено с помощью метода .Any ()
mylist.Any()