forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   C# множественные сравнения сокращение записи (http://forum.boolean.name/showthread.php?t=20861)

Evgen 29.10.2020 16:06

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

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

Код:

if( a=="x" || a=="y" || a=="z" )
заменить на что-то типа этого
Код:

if( a=="x"=="y"=="z" )
...
или так
...
if( a==("x","y","z") )

Пролистал пару мануалов ничего не нашел. Т.е. возможно только сравнение через for или switch (а это раздувает код).

Randomize 29.10.2020 21:40

Ответ: C# множественные сравнения сокращение записи
 
PHP код:

["x""y""z"].Contains(a


Evgen 30.10.2020 00:43

Ответ: C# множественные сравнения сокращение записи
 
Цитата:

Сообщение от Randomize (Сообщение 317836)
PHP код:

["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

pax 30.10.2020 07:34

Ответ: C# множественные сравнения сокращение записи
 
Модифицировал
PHP код:

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");
    }
  }



Andvrok 30.10.2020 17:40

Ответ: C# множественные сравнения сокращение записи
 
Как pax написал, да. Если нужно не тупое сравнение x == y, а что-то хитрее, то через тот же linq вместо contains берёшь any и в предикате любое условие.

Evgen 30.10.2020 18:40

Ответ: C# множественные сравнения сокращение записи
 
Как вариант да можно... Я думал в C# ченить уже изобрели для подобных конструкций, чтобы без List и прочих классов.

Randomize 30.10.2020 20:05

Ответ: C# множественные сравнения сокращение записи
 
Цитата:

Сообщение от Evgen (Сообщение 317847)
чтобы без List и прочих классов.

"xyz".Contains(a) :-D

Andvrok 30.10.2020 21:43

Ответ: C# множественные сравнения сокращение записи
 
Цитата:

Сообщение от Evgen (Сообщение 317847)
Как вариант да можно... Я думал в C# ченить уже изобрели для подобных конструкций, чтобы без List и прочих классов.

Изобрели. Но не в твоей версии сишарпа, раз у тебя только через лист получается.

Evgen 30.10.2020 21:58

Ответ: C# множественные сравнения сокращение записи
 
Цитата:

Сообщение от Andvrok (Сообщение 317849)
Изобрели. Но не в твоей версии сишарпа, раз у тебя только через лист получается.

Ссылочку дай тогда на MSDN если такой вумный.

Andvrok 30.10.2020 23:12

Ответ: C# множественные сравнения сокращение записи
 
Не нравится через лист, делаешь через массив, суть не меняется.

PHP код:

new string[] { "x""y""z" }.Contains(a); 

Без инициализации объекта фокуса в любом случае не получится.
Хочешь удобней? Пиши себе хелперы.

PHP код:

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);
    }



Evgen 01.11.2020 03:13

Ответ: C# множественные сравнения сокращение записи
 
Мат можно было убрать.
А то как детский сад.
Да компилятор далеко не последней версии. Лучше тогда наверное for.

Randomize 01.11.2020 05:22

Ответ: C# множественные сравнения сокращение записи
 
Цитата:

Сообщение от Evgen (Сообщение 317859)
А то как детский сад.

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

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot