После сужения моего вопроса я собирался Google, и найдите ответ здесь .
В основном по некоторым причинам ListViewItems установлены выровняться налево. Установка их для Протяжения решает эту проблему. Это сделано через стиль как так:
Это, к сожалению, влияет на каждый столбец, но затем можно установить содержание других столбцов к левому, правильному, центр, как объяснено в ссылке.
Весь смысл использования IEnumerable в том, чтобы вы могли лениво перебирать содержимое. Таким образом, на самом деле нет концепции индекса. То, что вы делаете, действительно не имеет большого смысла для IEnumerable. Если вам нужно что-то, что поддерживает доступ по индексу, поместите это в настоящий список или коллекцию.
То, что вы делаете, действительно не имеет большого смысла для IEnumerable. Если вам нужно что-то, что поддерживает доступ по индексу, поместите это в настоящий список или коллекцию. То, что вы делаете, действительно не имеет большого смысла для IEnumerable. Если вам нужно что-то, что поддерживает доступ по индексу, поместите это в настоящий список или коллекцию.Я бы реализовал его так:
public static class EnumerableExtensions
{
public static int IndexOf<T>(this IEnumerable<T> obj, T value)
{
return obj.IndexOf(value, null);
}
public static int IndexOf<T>(this IEnumerable<T> obj, T value, IEqualityComparer<T> comparer)
{
comparer = comparer ?? EqualityComparer<T>.Default;
var found = obj
.Select((a, i) => new { a, i })
.FirstOrDefault(x => comparer.Equals(x.a, value));
return found == null ? -1 : found.i;
}
}
Я бы усомнился в мудрости, но, возможно:
source.TakeWhile(x => x != value).Count();
(используя EqualityComparer
для эмуляции ! =
, если необходимо) - но вам нужно посмотреть, чтобы вернуть -1, если не найдено ... так что, возможно, просто сделайте это долгим путем
public static int IndexOf<T>(this IEnumerable<T> source, T value)
{
int index = 0;
var comparer = EqualityComparer<T>.Default; // or pass in as a parameter
foreach (T item in source)
{
if (comparer.Equals(item, value)) return index;
index++;
}
return -1;
}