Как на C# проверить наличие в списке?

squirrel

Client
Регистрация
27.08.2015
Сообщения
10
Благодарностей
2
Баллы
3
Есть список Names. Нужно проверить наличие в нем строки "Vasya".
Вот, нагуглил решение:
Код:
IZennoList Names = project.Lists["names"]; //привязываемся к списку
string Rez;
string Element = "Vasya";
string Filescreated = Names.Find((x) => x == Element);
                if (Filescreated!="") Rez = "0";
                else Rez = "1";
return Rez;
Но зенка на это ругается: 10:03:16 Компиляция кода Ошибка в действии "CS1061" ""ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" не содержит определение для "Find". Не удалось найти метод расширения "Find", принимающий первый аргумент типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" (пропущена директива using или ссылка на сборку?)".

Подскажите, что не так?

Директивы using System.Linq и using System.Collections.Generic подключены по умолчанию, а больше не знаю куда и смотреть...
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
Есть список Names. Нужно проверить наличие в нем строки "Vasya".
Вот, нагуглил решение:
Код:
IZennoList Names = project.Lists["names"]; //привязываемся к списку
string Rez;
string Element = "Vasya";
string Filescreated = Names.Find((x) => x == Element);
                if (Filescreated!="") Rez = "0";
                else Rez = "1";
return Rez;
Но зенка на это ругается: 10:03:16 Компиляция кода Ошибка в действии "CS1061" ""ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" не содержит определение для "Find". Не удалось найти метод расширения "Find", принимающий первый аргумент типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoList" (пропущена директива using или ссылка на сборку?)".

Подскажите, что не так?

Директивы using System.Linq и using System.Collections.Generic подключены по умолчанию, а больше не знаю куда и смотреть...
C#:
IZennoList Names = project.Lists["names"]; //привязываемся к списку
string Element = "Vasya";
return Names.Contains(Element); // True/False
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
C#:
IZennoList Names = project.Lists["names"]; //привязываемся к списку
string Element = "Vasya";
return Names.Contains(Element); // True/False
Привет. Использую для определения пола и не только. Подскажи, можно сделать поиск по точному вхождению. Что бы считалось слово целиком. Например Vasya$.
А то у меня значение "Екатерина Андреева" определил как мужской пол по имени "Андре".
Вообще конечно лучше регулярки, потому что регистрозависимый поиск получается.
 
Последнее редактирование:
  • Спасибо
Реакции: irving zisman и seodima

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
Привет. Использую для определения пола и не только. Подскажи, можно сделать поиск по точному вхождению. Что бы считалось слово целиком. Например Vasya$.
А то у меня значение "Екатерина Андреева" определил как мужской пол по имени "Андре".
Вообще конечно лучше регулярки, потому что регистрозависимый поиск получается.
Вообще Сontains по точному вхождению и ищет.
Если надо регекспом можно так:
C#:
IZennoList Names = project.Lists["names"];
Regex re = new Regex("Vasya",RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
 
  • Спасибо
Реакции: GreenWay и Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Вообще Сontains по точному вхождению и ищет.
Если надо регекспом можно так:
C#:
IZennoList Names = project.Lists["names"];
Regex re = new Regex("Vasya",RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
А можно еще сделать так, что бы вместо Vasya я мог подставлять переменную из проекта, а еще лучше регулярку целиком если так вобще можно. Просто значения разные, могут быть символы разные, лучше я буду в прокете готовить заранее регулярку обработкой текста. А уже сниппет обрабатывал бы готовый вариант.

Я вобще не понимаю как "Екатерина Андреева", определятся как мужской и как женский пол. У меня два списка с именами я чекаю значение в каждом из них. Может я не правильно сниппет составил?
C#:
IZennoList Names = project.Lists["FEMALE"]; //привязываемся к списку
lock (SyncObjects.ListSyncer)
 {
string Element = project.Variables["NAME"].Value;
return Names.Contains(Element); // True/False
 }
 
Последнее редактирование:

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
А можно еще сделать так, что бы вместо Vasya я мог подставлять переменную из проекта, а еще лучше регулярку целиком если так вобще можно. Просто значения разные, могут быть символы разные, лучше я буду в прокете готовить заранее регулярку обработкой текста. А уже сниппет обрабатывал бы готовый вариант.

Я вобще не понимаю как "Екатерина Андреева", определятся как мужской и как женский пол. У меня два списка с именами я чекаю значение в каждом из них. Может я не правильно сниппет составил?
C#:
IZennoList Names = project.Lists["FEMALE"]; //привязываемся к списку
lock (SyncObjects.ListSyncer)
{
string Element = project.Variables["NAME"].Value;
return Names.Contains(Element); // True/False
}
Оно ?
C#:
string nameRegexp = project.Variables["nameRegexp"].Value; // nameRegexp - название зенно переменной
IZennoList Names = project.Lists["names"];
Regex re = new Regex(nameRegexp, RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Пример того, что по Contains вхождение не точное.
@VladZen
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Yuriy Zymlex

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
оно и не будет точным, поставь сравнение с буквой а, вытащит первое вхождение, строку в +100500 символов если там присутствует буква а
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
Пример того, что по Contains вхождение не точное.
Чудеса блин, админы это как ?

оно и не будет точным, поставь сравнение с буквой а, вытащит первое вхождение, строку в +100500 символов если там присутствует буква а
Еще бы в доках написали что метод переопределен, а то тишинамс:
http://help.zennolab.com/en/v5/zennoposter/5.17.0.0/topic898.html#
 
  • Спасибо
Реакции: Yuriy Zymlex

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
попробуй так
Код:
var sourceList = project.Lists["SourceList"];
sourceList.Add("test test");
sourceList.Add("test");

return sourceList.First(s=>s == "test");
в этом случае найдёт именно test
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
попробуй так
Код:
var sourceList = project.Lists["SourceList"];
sourceList.Add("test test");
sourceList.Add("test");

return sourceList.First(s=>s == "test");
в этом случае найдёт именно test
Да, но Contains должен тоже возвращать true только если полное совпадение, получается или компаратор переопределен, или метод, но информации об этом нет.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Оно ?
C#:
string nameRegexp = project.Variables["nameRegexp"].Value; // nameRegexp - название зенно переменной
IZennoList Names = project.Lists["names"];
Regex re = new Regex(nameRegexp, RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
Да этот метод все правильно определил. Пример шаблона (определения пола по имени) ниже, если кому надо.
Определить найти узнать пол по списку по имени мужской женский м ж половой признак определить пол чекнуть пол узнать пол
 

Вложения

Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Да, но Contains должен тоже возвращать true только если полное совпадение, получается или компаратор переопределен, или метод, но информации об этом нет.
ответ true, но это не говорит что полное совпадение со строкой
Код:
var sourceList = project.Lists["SourceList"];
sourceList.Add("test test");
sourceList.Add("test");

return sourceList.Any(s=>s.Contains("test"));
 
  • Спасибо
Реакции: TeslaCo

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
ответ true, но это не говорит что полное совпадение со строкой
Код:
var sourceList = project.Lists["SourceList"];
sourceList.Add("test test");
sourceList.Add("test");

return sourceList.Any(s=>s.Contains("test"));
Вы путаете String.Contains и Collection.Contains
Contains примененный к строке, ищет совпадение внутри строки, т.к. внутри строки есть test то, мы получаем true
А Contains примененный к коллекции, ищет совпадение объекта внутри коллекции, именно объекта, поэтому по умолчанию должно срабатывать только при полном соответствии.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Обновил шаблон Определение пола по спискам регулярка v 0.7
Прочекал 100к имен с Авито. Произвел необходимые правки. Немного пополнил списки с именами.
Определить найти узнать пол по списку по имени мужской женский м ж половой признак определить пол чекнуть пол узнать пол
 

Вложения

  • Спасибо
Реакции: Zlodey-

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