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

temass

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

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);
  }
пробовал код предложенный тут на форуме, который сразу удаляет дубли и чистит список от пустых строк, но у меня в итоге остается пустой файл, даже если там были данные
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
271
Баллы
63
Попробуй так
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));
 
Последнее редактирование:

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Попробуй так
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));
этот код я пробовал, у меня в итоге список полностью пустой оказывается....почему не пойму
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
что самое интересное, мой код изначально работал и я вроде ничего не менял, но потом просто бац и не работает, виснет и выдает ошибку(((
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
а куда это вписать? я еще дуб дубом, не могу сообразить
Смотря, что ты делаешь, если берешь строки из файла, можешь брать так:
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

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
271
Баллы
63
этот код я пробовал, у меня в итоге список полностью пустой оказывается....почему не пойму
Я там немного ошибся, поправил, проверил у себя - всё работает.
 

temass

Client
Регистрация
06.06.2015
Сообщения
98
Благодарностей
3
Баллы
8
Смотря, что ты делаешь, если берешь строки из файла, можешь брать так:
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);
мне подходит второй способ, но в режиме отладки таже ошибка выскакивает, может быть причина в том что некоторые списки у меня полностью с пустыми строками, без значений? Как проверить что список содержит только пустые строки и избавиться от них, чтобы в итоге он был полностью пустой
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
Как проверить что список содержит только пустые строки и избавиться от них, чтобы в итоге он был полностью пустой
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();
 

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