Попробуйте android:layout_centerInParent="true"
или android:layout_centerHorizontal="true"
, они относятся к RelativeLayout
Это должно сделать это:
public static bool ContainsExactlyOneItem<T>(this IEnumerable<T> source)
{
using (IEnumerator<T> iterator = source.GetEnumerator())
{
// Check we've got at least one item
if (!iterator.MoveNext())
{
return false;
}
// Check we've got no more
return !iterator.MoveNext();
}
}
Вы можете исключить это дальше, но я не советую вам делать это:
public static bool ContainsExactlyOneItem<T>(this IEnumerable<T> source)
{
using (IEnumerator<T> iterator = source.GetEnumerator())
{
return iterator.MoveNext() && !iterator.MoveNext();
}
}
Это Такая хитрая хитрость, но, вероятно, не должна использоваться в производственном коде. Это просто недостаточно ясно. Дело в том, что побочный эффект в LHS & amp; оператор, необходимый для правильной работы RHS, просто отвратителен ... хотя это очень весело;)
РЕДАКТИРОВАТЬ: Я только что видел, что вы придумали точно то же самое, но на произвольную длину. Ваше окончательное утверждение возврата неверно - оно должно быть возвращено !en.MoveNext()
. Вот полный метод с более хорошим именем (IMO), проверкой аргументов и оптимизацией для ICollection
/ ICollection<T>
:
public static bool CountEquals<T>(this IEnumerable<T> source, int count)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (count < 0)
{
throw new ArgumentOutOfRangeException("count",
"count must not be negative");
}
// We don't rely on the optimizations in LINQ to Objects here, as
// they have changed between versions.
ICollection<T> genericCollection = source as ICollection<T>;
if (genericCollection != null)
{
return genericCollection.Count == count;
}
ICollection nonGenericCollection = source as ICollection;
if (nonGenericCollection != null)
{
return nonGenericCollection.Count == count;
}
// Okay, we're finally ready to do the actual work...
using (IEnumerator<T> iterator = source.GetEnumerator())
{
for (int i = 0; i < count; i++)
{
if (!iterator.MoveNext())
{
return false;
}
}
// Check we've got no more
return !iterator.MoveNext();
}
}
РЕДАКТИРОВАТЬ: А теперь для функциональных поклонников, рекурсивная форма CountEquals
( пожалуйста, не используйте это , оно здесь только для хихиканья):
public static bool CountEquals<T>(this IEnumerable<T> source, int count)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (count < 0)
{
throw new ArgumentOutOfRangeException("count",
"count must not be negative");
}
using (IEnumerator<T> iterator = source.GetEnumerator())
{
return IteratorCountEquals(iterator, count);
}
}
private static bool IteratorCountEquals<T>(IEnumerator<T> iterator, int count)
{
return count == 0 ? !iterator.MoveNext()
: iterator.MoveNext() && IteratorCountEquals(iterator, count - 1);
}
РЕДАКТИРОВАТЬ: Обратите внимание, что для чего-то вроде LINQ to SQL, вы должны использовать простой подход Count()
- потому что это позволит сделать это в базе данных, а не после получения реальных результатов.
seq.Skip(1).Any()
сообщит вам, есть ли в списке ноль или один элемент.
Я думаю, что редактирование, которое вы сделали, является наиболее эффективным способом проверки длины n. Но есть логическая ошибка, элементы меньше длины вернут истину. Посмотрите, что я сделал со вторым оператором return.
public static bool LengthEquals<T>(this IEnumerable<T> en, int length)
{
using (var er = en.GetEnumerator())
{
for (int i = 0; i < length; i++)
{
if (!er.MoveNext())
return false;
}
return !er.MoveNext();
}
}