Да, это ограничение GitLab. Существует открытая проблема с запросом этой функции:
https://gitlab.com/gitlab-org/gitlab-ce/issues/50459
Надеюсь, это будет в конечном итоге будут реализованы.
Если вы просто заботитесь о существовании, вы можете вместо этого использовать ContainsValue (0)
или Any (p => p.Value == 0)
? Поиск по значению необычен для словаря <,>
; если бы вы искали по ключу, вы могли бы использовать TryGetValue
.
Еще один подход:
var record = data.Where(p => p.Value == 1)
.Select(p => new { Key = p.Key, Value = p.Value })
.FirstOrDefault();
Возвращает класс - так будет null
, если не найден.
Я предлагаю вам изменить его следующим образом:
var query = m_AvailableDict.Where(p => p.Value == 0).Take(1).ToList();
Затем вы сможете увидеть, пуст ли список или нет и примите первое значение, если это не так, например,
if (query.Count == 0)
{
// Take action accordingly
}
else
{
Guid key = query[0].Key;
// Use the key
}
Обратите внимание, что в словаре нет реальной концепции «первой» записи - порядок, в котором она повторяется, не является четко определенным. Если вы хотите получить пару ключ / значение, которая была первой , введенной с этим значением, вам понадобится некоторый словарь, сохраняющий порядок.
(Предполагается, что вы действительно хотите знать ключ - если вы просто после проверки существования, Marc '
Вам нужен метод Any
, который также предоставляет вам соответствующий элемент. Вы можете легко написать этот метод самостоятельно.
public static class IEnumerableExtensions
{
public static bool TryGetFirst<TSource>(this IEnumerable<TSource> source,
Func<TSource, bool> predicate,
out TSource first)
{
foreach (TSource item in source)
{
if (predicate(item))
{
first = item;
return true;
}
}
first = default(TSource);
return false;
}
}
Используйте ключевое слово default().
bool exists = !available.Equals(default(KeyValuePair<Guid, int>));