JOTHI KUMAR Member 10918227 Ответов: 4

Как проверить условие без использования if else condition in ASP.NET с#


Привет Всем,
У меня есть пять полей, таких как возраст,тип возраста,оплата,страна,работа все поля содержат только 0 или 1 или 2. выше полей мне нужно проверить эту комбинацию из трех, если я ставлю, если еще мне нужно написать еще 50, если еще условие невозможно.любая идея или любое другое утверждение

Что я уже пробовал:

Я не могу найти никакого решения для этой задачи. кто-нибудь может дать несколько советов

Azziet

вы можете использовать корпус выключателя,
пожалуйста, поделитесь кодом, который вы пробовали, с кодом if else

JOTHI KUMAR Member 10918227

инт возраста;
инт agetype;
инт платить;
инт дру;
работа инт ;

если получить выше значения полей в наборе данных, то выше значения есть только 0,1,2.
ниже условия как я могу написать

если(возраст ==0 &&усилителя; agetype==0 &&усилителя; платить==0 &амп;&амп; П==0 &ампер;&ампер;=работать=0)
{
}
остальное, если(возраст ==0 &&усилителя; agetype==1 &амп;&амп; платить==1 &амп;&амп; АТ==1 &амп;&амп; работа==1)
{
}
остальное, если(возраст ==0 &&усилителя; agetype==2 &амп;&амп; платить==2 &амп;&амп; п==2 &амп;&амп; работа==2)
{
}
остальное, если(возраст ==0 &&усилителя; agetype==0 &&усилителя; платить==1 &амп;&амп; П==0 &&усилителя; работы==2)
{
}

остальное, если(возраст ==0 &&усилителя; agetype==1 &амп;&амп; платить==0 &амп;&амп; п==2 &ампер;&ампер;=работать=0)
{
}

сколько я пишу, чтобы выполнить пять условий

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Shambhoo kumar

Привет, Джоти Кумар, вы можете попробовать "C# Ternary(?)" или switch case.

JOTHI KUMAR Member 10918227

любой образец для использования тернарного оператора с использованием приведенного выше условия

Philippe Mori

Вы должны поместить образец кода в свой вопрос в блок кода, чтобы сделать его более читаемым. Сказав это, я бы сказал, что решение действительно зависит от того, что вы делаете в каждом конкретном случае... Учитывая, что существует 243 возможности, очень подозрительно, что вы напишете чек и блок кода для каждой из них.

Philippe Mori

Поскольку значения 0, 1 и 2, вероятно, не представляют реальных значений, вы должны использовать Enum вместо.

Patrice T

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

Rasik Bihari Tiwari

Если вам нужно проверить, всегда ли пять полей имеют значение 0, 1 или 2, то вам просто нужно пять операторов if. Зачем вам писать 50, если другое условие? Можете ли вы добавить несколько примеров кода к своему вопросу, чтобы стало более ясно, чего вы пытаетесь достичь?

4 Ответов

Рейтинг:
2

Patrice T

Если вы задаетесь вопросом, почему ответы настолько разные и не обязательно полезные, то это потому, что вы не дали нам полезной информации.
Вы забыли сказать нам, что вы делаете, когда ваш тест определил комбинацию значений. И это имеет значение.
Настоящий кодекс:

int age;
int agetype;
int pay;
int cou;
int work;

if getting above fields value in dataset, above value have only 0,1,2.
below condtion how can i write

if(age ==0 && agetype==0 && pay==0 && cou==0 && work==0)
{
}
else if(age ==0 && agetype==1 && pay==1 && cou==1 && work==1)
{
}
else if(age ==0 && agetype==2 && pay==2 && cou==2 && work==2)
{
}
else if(age ==0 && agetype==0 && pay==1 && cou==0 && work==2)
{
}

else if(age ==0 && agetype==1 && pay==0 && cou==2 && work==0)
{
}

может быть упрощен до:
int age;
int agetype;
int pay;
int cou;
int work;

if getting above fields value in dataset, above value have only 0,1,2.
below condtion how can i write

потому что if структура ничего не делает.


Рейтинг:
2

CPallini

Вы можете использовать многомерный массив. Предполагая (для простоты), что ваш if блоки операторов просто возвращают целое число:

static int[, ,] selector;

static int select(int i, int j, int k)
{
  return selector[i, j, k];
}

public static void Main()
{

  selector = new int[3, 3, 3];

  selector[0, 0, 0] = 1; // this corresponds to if (i==0 && j==0 && k == 0)
  selector[0, 0, 1] = 1; //   "        "     "  if (i==0 && j==0 && k ==1)
  selector[0, 0, 2] = 5;
  selector[0, 1, 0] = 7;
  selector[0, 1, 1] = 7;
  selector[0, 1, 2] = 7;
  //...
  selector[2, 2, 2] = 10;
}


С другой стороны, если ваш 'if исполнительные блоки " являются более comlpex, вы можете использовать многомерный массив делегатов.


JOTHI KUMAR Member 10918227

В селекторе[0,0,0] =1; Что означает этот 1??

Philippe Mori

Если условия в основном исключительные, это может иметь некоторый смысл, но я бы использовал Action<> или Func<> как тип массива, так и помещенный туда код.

CPallini

Внутри если-еще если условия цепочки взаимоисключающие.
Да, я держу его простым. Для чего угодно, кроме голого оператора return, вам нужно изменить тип массива, как вы предложили.

Рейтинг:
1

Peter Leow

Если это требование проверить все перестановки 5 параметров, то выхода нет. Тем не менее, вы можете сделать свое кодирование чище, яснее и более прямолинейным с помощью Твиста. Вы можете представить каждую перестановку этих 5 int в виде строкового шаблона из 5 цифр, каждая из которых может быть 0, 1 или 2. Например:

int age = 0;
int agetype = 2;
int pay = 0;
int cou = 1;
int work = 2;
// Convert int to string pattern
string str = age.ToString() + agetype.ToString() + pay.ToString() + cou.ToString() + work.ToString();
switch(str)
{
    case "00000": // first digit is age, second agetype, third pay, and so on...
        // do sth
        break;
    case "00001":
        // do sth
        break;
    case "00002":
        // do sth
        break;
    case "00010":
        // do sth
        break;
    // and so on...
}

Взыскать с рисунка на оригинал типа,
// Recovery
age = int.Parse(str.Substring(0, 1));
agetype = int.Parse(str.Substring(1, 1));
pay = int.Parse(str.Substring(2, 1));
cou = int.Parse(str.Substring(3, 1));
work = int.Parse(str.Substring(4, 1));


Jochen Arndt

В принципе, хорошая попытка. Но зачем использовать строку?

Просто умножьте каждую переменную в степени 10 так, чтобы использовались целые числа (значения, как известно, от 0 до 2):

переключатель (возраст + agetype * 10 + платить * 100 + П * 1000 + работа * 10000)
{
// ...
}

Peter Leow

А почему бы и нет? Это еще один поворот.

Jochen Arndt

Использование целых чисел происходит быстрее и генерирует меньше кода (я парень с C/C++: нет переключателя со строками).

Оба решения, вероятно, будут реализованы компилятором, генерирующим таблицу поиска, которая указывает на решение Карлоса.

Peter Leow

Спасибо, я узнал кое-что ценное.

Рейтинг:
0

Philippe Mori

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

Имена не все правильно подобраны, но у меня нет необходимой информации о том, что делает приложение

enum Age { Low = 0, Medium = 1, High = 2}
enum AgeType { Low = 0, Medium = 1, High = 2}
enum Payment { Low = 0, Medium = 1, High = 2}
enum Country { US = 0, Canada = 1, Mexico = 2}
enum Working{ Low = 0, Medium = 1, High = 2}

class Data
{
    public Age { get; set; }    
    public AgeType { get; set; }
    public Payment { get; set; }
    public Country { get; set; }
    public Working { get; set; }
}

class Code
{
    public abstract bool Test(Data data);
    public abstract void Execute(Data data);
}

class Case1Code : Code 
{
    public virtual bool Test(Data data)
    {
        return data.Age == Age.Low && ... ;
    }

    public virtual void Execute(Data data)
    {
        // Do something specific here...
    }
}

class Factory
{
    static Factory()
    {
        allChoices = new List<Code>();

        allChoices.Add(new Case1Code());
        allChoices.Add ... ;
    }

    public void Process(Data data)
    {
        allChoices.FirstOrDefault(x => x.Test(data))?.Process(data);
    }

    private static List<Code> allChoices;
}


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

На практике вы можете захотеть иметь иерархии классов для части данных (скажем, для страны), а затем перейти к другим иерархиям классов (возможно, для возрастных групп). Однако, не зная точно бизнес-процесс, трудно найти лучшее решение.

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

В зависимости от проблемы вы можете предпочесть использовать Action<> или Func<> вместо этого, особенно если у вас есть только одна простая операция или если каждая операция имеет свои собственные условия...