2015-06-03 3 views
1

Не уверен, что вопрос верный, но вот что я пытаюсь выполнить.Изменить, если оператор из переменной

Я запускаю цикл for, в котором я хочу изменить оператор if в каждом цикле.

Вот пример:

for(int i=0;i<3;i++){ 

    int currentField = field; 

    var context1=currentField; 
    int curprogr=0; 

    switch (i){ 
    case 0: 
     context1 = currentField % 10 != 0; 
     curprogr = 1; 
     break; 
    case 1: 
     context1 = Mathf.Floor(currentField/10) != 0; 
     curprogr = 10; 
     break; 
    case 2: 
     context1 = currentField % 10 != 0 && Mathf.Floor(currentField/10) != 0; 
     curprogr = 11; 
     break; 
    } 

    while(context1){ // Here is where I want it to chnage for each time the loop runs through // 
     // Some logic here... // 
    } 
} 

Я получаю эту ошибку: Не удается неявно преобразовать тип bool' to Int»в каждом switchcase в отношении к context1.

Надеюсь, что это имеет смысл, и любая помощь приветствуется.

Заранее спасибо

+2

u r назначая int переменное текущее поле контексту сначала, поэтому он рассматривает переменную var как int..later, вы пытаетесь осветить контекст функции bool1, поэтому эта ошибка является comign – Sachu

+0

Что такое условие ur if-else? – Mairaj

+0

Что вы хотите, чтобы ваше условие while было, поскольку число не является истинным или ложным (если вы не указали свое сравнение) –

ответ

6

context1 является int, так как вы assigend int к он здесь:

int currentField = field; 
var context1 = currentField; 

но позже вы присваиваете bool, Fе здесь:

context1 = currentField % 10 != 0; 

В !=-operator либо возвращается true или false, так что вы не можете назначить его на эту переменную.

Так просто сделать его переменный Ий:

bool context1 = false; 

Я также думаю, что вы на самом деле хотите использовать if вместо while -loop.

Так измените его на

if(context1) 
{ 
    // Here is where I want it to change for each time the loop runs through // 
} 

Почему я думаю, что? Потому что вы упомянули if в названии, и кажется, что вы не хотите изменять условие в while -loop, что делает его бесконечным циклом.

+0

Ahhh, не видел лес из-за дерева :-) Спасибо Тим. – Mansa

+0

Значимые имена переменных и указания типов вместо использования 'var' help, чтобы избежать этих проблем;) –

+0

Как потенциально может возникнуть с помощью справки' while (true) 'здесь? Вы объясняете, почему код не компилируется, но не то, что потенциально неправильно с кодом на более фундаментальном уровне. –

0

Здесь вы назначаете var context1=currentField; и в случае, если заявление вы пытаетесь присвоить логическое значение, так это неправильно.

См случай 0:

context1 = currentField % 10 != 0; 
0
int currentField = field; 

var context1=currentField; // переменная будет считать междунар, потому что вы присваиваете переменной INT к нему так лучше assingn true или false к вар context1 первого

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

0

Выражение currentField % 10 != 0 возвращает bool.

Ваша переменная context1 имеет тип int, поэтому вы не можете назначить это выражение этой переменной.

Я не уверен, что вы пытаетесь сделать здесь, но рассмотреть возможность использования вашего выражения в если заявления:

if(currentField % 10 != 0) 
{ 
    curprogr = 1; 
} 
break; 
1

Вы можете использовать функцию делегата, такую ​​как Predicate, для достижения этой функциональности. HTH

Смежные вопросы