#c# #if-statement #methods
#c# #if-statement #методы
Вопрос:
Приведенный ниже пример кода является лишь коротким, мой реальный код для одного оператора if состоит из более чем 1000 строк кода, и их нужно вызывать несколько раз. Итак, чтобы сохранить строки, я планирую поместить их в метод и просто вызвать этот метод, который составляет всего около 1 строки?
Мне было интересно, есть ли возможный способ поместить несколько операторов if else в НЕСКОЛЬКО методов, а затем вызвать эти методы в основном методе. Если метод SuperSignalQ1 имеет значение true, то он будет проверять метод SuperSignalQ2 и так далее.
Мне это нужно, потому что без метода мой текущий код превышает 900 кб, что приводит к сбою моего компьютера. Это единственный способ, которым я мог бы сократить свой код, поместив его в метод и вызывая его в основном методе по мере необходимости, вместо того, чтобы вводить эти 100 строк каждый раз, когда они мне нужны.
Итак, в основном мой вопрос:
- Как вызвать метод в основном методе
- Как проверить, является ли этот метод истинным, чтобы затем он мог перейти к следующему методу. Я получаю ошибку при выполнении кода в 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
тестах. Не делайте этого.