Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эквивалент паскалевского или SQL "in" в С# 
:(
    Опции темы
Vit
Дата 10.1.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Как следующую конструкцию Дельфи (или паскаля) написать на C#, по возможности коротко и красиво (как сделать длинно, громоздко и некрасиво я знаю...)


Код
if SomeVariable in [1, 2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 37] then
  DoSomething
else
  DoSomethingElse;


Или аналогично SQL:

Код
Select ...
...
Where a in (1, 2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 37)



Очень не хочется писать 
Код
if (SomeVariable==1||
    SomeVariable==2||
    SomeVariable==3||
    SomeVariable==5||
    SomeVariable==7||
    SomeVariable==11||
    SomeVariable==13||
    SomeVariable==17||
    SomeVariable==23||
    SomeVariable==29||
    SomeVariable==31||
    SomeVariable==37)
...


Ещё меньше хочется вначале создавать коллекцию или массив, а потом вызывать его методы или городить какой-нибудь свой класс для того чтобы сделать такую простую штуку...

 



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
VisualProgrammerNET
Дата 10.1.2008, 00:47 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



можно через foreach. 

foreach (int a in массив_интов)
     if (a.... ) ....

Или через LINQ.

А не, немного не так понял вопрос. Но всё равно через foreach можно.

foreach (int a in [...массив])
     if (SomeVariable == a) ... 

Хотя одно и то же =)

А не, опять не так понял =) Всё равно спьяну чё-то ничё кроме коллекций в голову не лезет. Можно извращаться через метод Contains ещё. Щас люди потрезвее подскажут чё-то красивое  smile 

Это сообщение отредактировал(а) VisualProgrammerNET - 10.1.2008, 00:52


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Kefir
Дата 10.1.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



ну, например можно написать так:
Код

int i = 3;
if(Array.IndexOf(new int[] {3,4,5,6,7}, i) != -1)
{
  MessageBox.Show("элемент нашёлся!");
}
else
{
  MessageBox.Show("неудача");
}


PS Спасибо QryStaL за поправку В)

Это сообщение отредактировал(а) Kefir - 10.1.2008, 11:14
PM MAIL WWW Skype   Вверх
QryStaL
Дата 10.1.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Kefir, может быть, так:

Код

if(Array.IndexOf(new int[] {3,4,5,6,7}, i) != -1)
{
    ...
}


?


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Kefir
Дата 10.1.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



QryStaL, дада, именно, эт я что-то медленный. спасибо за поправку.
PM MAIL WWW Skype   Вверх
stab
Дата 10.1.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



используя LINQ:

Код

if (new int[] { 3, 4, 5, 6, 7 }.Contains(6))
{
}


лучше конечно не new, а забить readonly "константой".


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mr.DUDA
Дата 10.1.2008, 11:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Скажу проще: аналога оператору "in" в C#, да и в C++ и Java нет.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
stab
Дата 10.1.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



mr.DUDA, это синтаксический сахар! *начинает брызгать слюной*  smile 


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mr.DUDA
Дата 10.1.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(stab @  10.1.2008,  11:24 Найти цитируемый пост)
 это синтаксический сахар!

Скорее всего, раскладывающийся в тот же банальный switch  smile 



--------------------
user posted image
PM MAIL WWW   Вверх
Vit
Дата 10.1.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата(mr.DUDA @  10.1.2008,  05:24 Найти цитируемый пост)
Скорее всего, раскладывающийся в тот же банальный switch  



угу, только одна овесьма понятная строка кода заменяется громоздкой конструкцией на страницу... а так конечно....


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.