Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 29.10.2020, 16:06   #1
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
C# множественные сравнения сокращение записи

Существуют ли у C# инструменты сокращения записи множественного сравнения? Когда одну переменную или объект нужно сравнить с несколькими однотипными элементами или объектами.

например такое выражение:

if( a=="x" || a=="y" || a=="z" )
заменить на что-то типа этого
if( a=="x"=="y"=="z" )
...
или так
...
if( a==("x","y","z") )
Пролистал пару мануалов ничего не нашел. Т.е. возможно только сравнение через for или switch (а это раздувает код).
(Offline)
 
Ответить с цитированием
Старый 29.10.2020, 21:40   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: C# множественные сравнения сокращение записи

["x""y""z"].Contains(a
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
Andvrok (30.10.2020), Evgen (30.10.2020)
Старый 30.10.2020, 00:43   #3
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: C# множественные сравнения сокращение записи

Сообщение от Randomize Посмотреть сообщение
["x""y""z"].Contains(a
https://www.jdoodle.com/compile-c-sharp-online/

Что-то не компилируется.

using System;
using System.Linq;

class HelloWorld {
  static void Main() {
    string a="x"; 
    if( ["x", "y", "z"].Contains(a) ){  
        Console.WriteLine("a contains x");
    }
  }
}
Это наверное C# 7 Или C# 8
(Offline)
 
Ответить с цитированием
Старый 30.10.2020, 07:34   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: C# множественные сравнения сокращение записи

Модифицировал
using System;
using System.Collections.Generic;
using System.Linq;

class 
HelloWorld {
  static 
void Main() {
    
string a="x"
    if( new List<
string>{"x""y""z"}.Contains(a) ){  
        
Console.WriteLine("a contains x");
    }
  }

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Andvrok (30.10.2020), Evgen (30.10.2020)
Старый 30.10.2020, 17:40   #5
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Ответ: C# множественные сравнения сокращение записи

Как pax написал, да. Если нужно не тупое сравнение x == y, а что-то хитрее, то через тот же linq вместо contains берёшь any и в предикате любое условие.
(Offline)
 
Ответить с цитированием
Старый 30.10.2020, 18:40   #6
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: C# множественные сравнения сокращение записи

Как вариант да можно... Я думал в C# ченить уже изобрели для подобных конструкций, чтобы без List и прочих классов.
(Offline)
 
Ответить с цитированием
Старый 30.10.2020, 20:05   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: C# множественные сравнения сокращение записи

Сообщение от Evgen Посмотреть сообщение
чтобы без List и прочих классов.
"xyz".Contains(a)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Andvrok (30.10.2020)
Старый 30.10.2020, 21:43   #8
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Ответ: C# множественные сравнения сокращение записи

Сообщение от Evgen Посмотреть сообщение
Как вариант да можно... Я думал в C# ченить уже изобрели для подобных конструкций, чтобы без List и прочих классов.
Изобрели. Но не в твоей версии сишарпа, раз у тебя только через лист получается.
(Offline)
 
Ответить с цитированием
Старый 30.10.2020, 21:58   #9
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: C# множественные сравнения сокращение записи

Сообщение от Andvrok Посмотреть сообщение
Изобрели. Но не в твоей версии сишарпа, раз у тебя только через лист получается.
Ссылочку дай тогда на MSDN если такой вумный.
(Offline)
 
Ответить с цитированием
Старый 30.10.2020, 23:12   #10
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Ответ: C# множественные сравнения сокращение записи

Не нравится через лист, делаешь через массив, суть не меняется.

new string[] { "x""y""z" }.Contains(a); 
Без инициализации объекта фокуса в любом случае не получится.
Хочешь удобней? Пиши себе хелперы.

class Program
{
    static 
void Main(string[] args)
    {
        var 
"y";
        if (
a.Compare("x""y""z"))
        {
            
Console.WriteLine("нихуясебе");
        }
    }

    
}

public static class 
AwesomeHelpers
{
    public static 
bool Compare<T>(this T whatparams T[] with)
    {
        return 
with.Contains(what);
    }

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Andvrok за это полезное сообщение:
ABTOMAT (31.10.2020), pax (31.10.2020), St_AnGer (30.10.2020)
Старый 01.11.2020, 03:13   #11
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: C# множественные сравнения сокращение записи

Мат можно было убрать.
А то как детский сад.
Да компилятор далеко не последней версии. Лучше тогда наверное for.
(Offline)
 
Ответить с цитированием
Старый 01.11.2020, 05:22   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: C# множественные сравнения сокращение записи

Сообщение от Evgen Посмотреть сообщение
А то как детский сад.
Fun fact:
Многие коллеги с шестизначной зарплатой используют мат.
Как говорит Артемий: язык профессионалов.

Но, справедливости ради, воздержитесь от обсценной лексики на публичном ресурсе, ведь для такого есть забор.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
ABTOMAT (02.11.2020), Arton (01.11.2020)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com