Метод Distinct() если в списке пустые строки

  • Автор темы Автор темы temass
  • Дата начала Дата начала

temass

Client
Регистрация
06.06.2015
Сообщения
102
Реакции
5
Баллы
18
Всем привет! Есть код

C#:
Развернуть Свернуть Копировать
var buf2 = Kabluk.Distinct().ToList();
                            Kabluk.Clear();
                            Kabluk.AddRange(buf2);

удаляет дубликаты, если список имеет только пустые строки, то код не выполняется и просто зависает обработка, выдавая такую ошибку


Получение списка локальных переменных Ссылка на объект не указывает на экземпляр объекта.


Как обойти это ограничение? Изначально я не могу знать получится список с пустыми строками или нет, после этого кода я очищаю списки от пустых строк, чтобы список был без строк, полностью пустой этим кодом

Код:
Развернуть Свернуть Копировать
lock(SyncObjects.ListSyncer) {
  for(int a=Kabluk.Count-1; a>=0 ; a--) {
     data1 = Kabluk[a];
     if (String.IsNullOrWhiteSpace(data1.Trim())) Kabluk.RemoveAt(a);
  }

пробовал код предложенный тут на форуме, который сразу удаляет дубли и чистит список от пустых строк, но у меня в итоге остается пустой файл, даже если там были данные
 
Изначально я не могу знать получится список с пустыми строками или нет
Когда берешь, делай выборку без пустых строк.
C#:
Развернуть Свернуть Копировать
.Where(str => !string.IsNullOrWhiteSpace(str))
 
Попробуй так
C#:
Развернуть Свернуть Копировать
List<string> list = project.Lists["OutputList"].ToList();
project.Lists["OutputList"].Clear();
list.Where(s=>s!=string.Empty).Distinct()
    .ToList()
    .ForEach(s=>project.Lists["OutputList"].Add(s));
 
Последнее редактирование:
Когда берешь, делай выборку без пустых строк.
C#:
Развернуть Свернуть Копировать
.Where(str => !string.IsNullOrWhiteSpace(str))
а куда это вписать? я еще дуб дубом, не могу сообразить
 
Попробуй так
C#:
Развернуть Свернуть Копировать
List<string> list = project.Lists["OutputList"].ToList();
project.Lists["OutputList"].Clear();
list.Where(s=>s!=string.IsNullOrEmpty).Distinct()
    .ToList()
    .ForEach(s=>project.Lists["OutputList"].Add(s));
этот код я пробовал, у меня в итоге список полностью пустой оказывается....почему не пойму
 
что самое интересное, мой код изначально работал и я вроде ничего не менял, но потом просто бац и не работает, виснет и выдает ошибку(((
 
а куда это вписать? я еще дуб дубом, не могу сообразить
Смотря, что ты делаешь, если берешь строки из файла, можешь брать так:
C#:
Развернуть Свернуть Копировать
File.ReadAllLines("path").Where(s => !string.IsNullOrWhiteSpace(s))
Таким образом, возьмешь все строки, которые не являются пустыми.

Если у тебя в работе шаблона формируется список, в котором есть пустые строки и тебе нужно от них избавиться, то можно использовать код выше, только без .Distinct()
C#:
Развернуть Свернуть Копировать
List<string> list = project.Lists["OutputList"].Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
project.Lists["OutputList"].Clear();
project.Lists["OutputList"].AddRange(list);
 
  • Оценить
Реакции: temass
Смотря, что ты делаешь, если берешь строки из файла, можешь брать так:
C#:
Развернуть Свернуть Копировать
File.ReadAllLines("path").Where(s => !string.IsNullOrWhiteSpace(s))
Таким образом, возьмешь все строки, которые не являются пустыми.

Если у тебя в работе шаблона формируется список, в котором есть пустые строки и тебе нужно от них избавиться, то можно использовать код выше, только без .Distinct()
C#:
Развернуть Свернуть Копировать
List<string> list = project.Lists["OutputList"].Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
project.Lists["OutputList"].Clear();
project.Lists["OutputList"].AddRange(list);
мне подходит второй способ, но в режиме отладки таже ошибка выскакивает, может быть причина в том что некоторые списки у меня полностью с пустыми строками, без значений? Как проверить что список содержит только пустые строки и избавиться от них, чтобы в итоге он был полностью пустой
 
Как проверить что список содержит только пустые строки и избавиться от них, чтобы в итоге он был полностью пустой
C#:
Развернуть Свернуть Копировать
List<string> list = project.Lists["OutputList"].Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
if (list.Count() >= 1) {
    project.Lists["OutputList"].Clear();
    project.Lists["OutputList"].AddRange(list);
} else project.Lists["OutputList"].Clear();
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)