Не удается неявно преобразовать тип "(int, int)" в "int" C#
Я начал изучать C# пару дней назад и столкнулся с вот такой проблемой.
public static int[] Score(bool check, int player, int pc) {
int[] score = { (check == true) ? (player += 1, pc -= 1) : (player -= 1, pc += 1) };
return score;
}
Мой IDE выдает ошибку Не удается неявно преобразовать тип "(int, int)" в "int".
Я также попробовал вот такой метод решения проблемы:
public static int[] Score(bool check, int player, int pc) {
int[] score = (check == true) ? (new int[player += 1, pc -= 1]) : (new int[player -= 1, pc += 1]);
return score;
}
Но этот способ также не хотел работать (Не удается неявно преобразовать тип "int[*,*]" в "int[]").
Что делать?
Ответы (2 шт):
Изучить разницу между кортежами (a,b) и разными видами массивов (type[] - одномерный, type[,] - многомерный и type[][] - ступенчатый). В вашем случае одномерный массив, который создается следующим образом:
int[] score = (check == true) ?
new int[] { player += 1, pc -= 1 } :
new int[] { player -= 1, pc += 1 };
int[] - одномерный однотипный массив, вы пытаетесь записать в него кортеж (int player, int pc) Так нельзя, это разные типы.
Думаю что в вашем случае подойдёт следующий вариант:
public static (int player, int pc) Score(bool check, int player, int pc) {
(int player, int pc) score = check == true ? (player += 1, pc -= 1) : (player -= 1, pc += 1);
return score;
}
(int player, int pc) a = Score(true, 2, 2); // <-- Вызывать так.
Или более продвинутый вариант, где ответа нет, а есть просто изменение значения:
public static void Score(bool check, ref int player, ref int pc)
{ // <-- ref получает ссылку на значение, а не его копию, и меняет его там-же, откуда производится вызов функции
if (check == true) { player += 1; pc -= 1; } else { player -= 1; pc += 1; };
}
///
int player = 2;
int pc = 2;
Score(true, ref player, ref pc);
В данном случае метод Score ничего не вернёт, а изменит значения player и pc прям в том месте, откуда производился вызов функции (ref при передаче указывать обязательно)
Если вам нужно всё-таки возвращать и не кортеж, советую разобраться с структурами, может это то, что вам нужно.