C # помещает несколько методов и вызывает их в основной метод

#c# #if-statement #methods

#c# #if-statement #методы

Вопрос:

Приведенный ниже пример кода является лишь коротким, мой реальный код для одного оператора if состоит из более чем 1000 строк кода, и их нужно вызывать несколько раз. Итак, чтобы сохранить строки, я планирую поместить их в метод и просто вызвать этот метод, который составляет всего около 1 строки?

Мне было интересно, есть ли возможный способ поместить несколько операторов if else в НЕСКОЛЬКО методов, а затем вызвать эти методы в основном методе. Если метод SuperSignalQ1 имеет значение true, то он будет проверять метод SuperSignalQ2 и так далее.

Мне это нужно, потому что без метода мой текущий код превышает 900 кб, что приводит к сбою моего компьютера. Это единственный способ, которым я мог бы сократить свой код, поместив его в метод и вызывая его в основном методе по мере необходимости, вместо того, чтобы вводить эти 100 строк каждый раз, когда они мне нужны.

Итак, в основном мой вопрос:

  1. Как вызвать метод в основном методе
  2. Как проверить, является ли этот метод истинным, чтобы затем он мог перейти к следующему методу. Я получаю ошибку при выполнении кода в MainCalculation

Не удается преобразовать группу методов ‘SuperSignalQ1’ в тип, не являющийся делегатом ‘bool’. Намеревались ли вы вызвать этот метод?

 public void SuperSignalQ1()
{
    if(RSI > RSI2) 
    {
        if(CCI > CCI2) //There are actually more than 20 if else here which is around 1000 lines
        {
            return;
        }
    }
    
}
public void SuperSignalQ2()
{
    if(RSI2 > RSI3)
    {
        if(CCI2 > CCI3) //There are actually more than 20 if else here which is around 1000 lines
        {
            return;
        }
    }
}
public void SuperSignalQ3()
{
    if(RSI3 > RSI4)
    {
        if(CCI3 > CCI4) //There are actually more than 20 if else here which is around 1000 lines
        {
            return;
        }
    }
}
public void MainCalculation()
{
    if (SuperSignalQ1 = True)
    {
        if(SuperSignalQ2 = True)
        {
            if SuperSignalQ3 = True)
            {
                SetColor(Color.White);
            }
        }
    }
}
  

Итак, по сути, поместите несколько вложенных операторов if в несколько методов, а затем выполните логическую проверку этих методов в основном методе

Комментарии:

1. Что касается вашей ошибки, вам необходимо объявить возвращаемый тип метода как bool вместо void . Но я предлагаю реструктурировать ваш код и использовать несколько классов для разных функций вместо того, чтобы запихивать все в один файл с помощью if-else

Ответ №1:

У вас есть

public void SuperSignalQ1()

и позже у вас есть

if (SuperSignalQ1 = True)

Этот оператор if нарушен.

В c # вы тестируете с помощью double equals:

if (someVariable == true)

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

Вам также не хватает некоторых скобок, поэтому C # думает, что вы ссылаетесь на него как на переменную, а не на метод.

Таким образом, он думает, что вы пытаетесь присвоить значение True указателю метода. На что он совершенно справедливо жалуется.

Похоже, вы действительно хотите, чтобы эти методы возвращали логическое значение, и вы могли бы сделать что-то вроде этого:

 public bool SuperSignalQ1()
{
    if(RSI > RSI2) 
    {
        if(CCI > CCI2) //There are actually more than 20 if else here which is around 1000 lines
        {
            return true;
        }
    }
    return false;   // if none of the conditions are valid
}
public bool SuperSignalQ2()
{
    if(RSI2 > RSI3)
    {
        if(CCI2 > CCI3) //There are actually more than 20 if else here which is around 1000 lines
        {
            return true;
        }
    }
    return false;   // if none of the conditions are valid

}
public bool SuperSignalQ3()
{
    if(RSI3 > RSI4)
    {
        if(CCI3 > CCI4) //There are actually more than 20 if else here which is around 1000 lines
        {
            return true;
        }
    }
}
public void MainCalculation()
{
    if (SuperSignalQ1() == true)
    {
        if(SuperSignalQ2() == true)
        {
            if (SuperSignalQ3() == true)
            {
                SetColor(Color.White);
            }
        }
    }
}
  

НО

  • Для boolean вы обычно не используете == формат, вы просто переходите if (SuperSignalQ1())
  • Как предположил @aether643, вы можете захотеть провести рефакторинг своего кода, чтобы у вас не было такого длинного фрагмента кода без умственных перерывов
  • В C # вы действительно можете выполнять задания в if тестах. Не делайте этого.