Вместо простого извлечения значений, запросите KeyValuePair
fooDictionary.Where(x => !x.Value.Boo).ToList();
Это даст вам все пары значений ключа, где MyObject
имеет значение Boo
false.
Примечание: я изменил вашу строку x.Value.Boo == false
на !x.Value.Boo
, так как это более распространенный синтаксис и (IMHO) легче читать / понимать намерения.
РЕДАКТИРОВАТЬ
На основании того, что вы обновили вопрос, чтобы перейти от работы со списком к этому новому ExtensionMethod
, вот обновленный ответ (я оставляю все остальное как есть, поскольку он отвечает на исходный вопрос, который был опубликован)).
// Note this is assuming you can use the new ValueTuples, if not
// then you can change the return to Tuple<string, MyObject>
public static (string key, MyObject myObject) ExtensionMethod(this IEnumerable<KeyValuePair<string, MyObject>> items)
{
// Do whatever it was you were doing here in the original code
// except now you are operating on KeyValuePair objects which give
// you both the object and the key
foreach(var pair in items)
{
if ( YourCondition ) return (pair.Key, pair.Value);
}
}
И используйте это так
(string key, MyObject myObject) = fooDictionary.Where(x => !x.Value.Boo).ExtensionMethod();