Выбор случайного элемента из списка кортежей C#

Я новичок в программировании, и я пытаюсь добавить случайное движение бота в небольшую игру, которую я сделал. Моя идея заключалась в том, чтобы составить список кортежей всех допустимых ходов, а затем выбрать случайный кортеж из этого списка, чтобы затем деконструировать и изменить значение в 2D-массиве. Я просмотрел весь Интернет и нашел способ составить список кортежей (я думаю), но не смог выбрать случайный элемент из этого списка.

Вот что я пробовал:

List<Tuple<int, int>> legalMoves; // To make the list of tuples

// Later on in a double for-loop that iterates through all the rows and columns of the 2D-array I check if that certain row and column combination is a legal move and then add it to the list like so:

legalMoves.Add(Tuple.Create(row, col));

//Then in a different method I try to pick a random element from that list (this doesn't work)

Random random = new Random();
int randomIndex = random.Next(legalMoves.Count);
(int, int) randomMove = legalMoves[randomIndex];

В последней строке выдает следующую ошибку: Ошибка CS0029 Не удается неявно преобразовать тип «System.Tuple<int, int>» в «(int, int)»

Есть ли способ заставить это работать?

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

Правильный тип — ValueTuple, а не Tuple.

Panagiotis Kanavos 10.01.2023 20:31

Если у вас есть сомнения, объявите его как var randomMove = legalMoves[randomIndex]; и посмотрите, какой тип выводится

Jimi 10.01.2023 20:32

Пожалуйста, перечитайте минимально воспроизводимый пример, чтобы ваши будущие вопросы были лучше - т.е. нет абсолютно ничего о случайных числах, связанных с вопросом, который вы задаете - (int, int) randomMove = Tuple.Create(1,2); это весь код, необходимый для того, чтобы задать этот вопрос... (что также получить шанс предоставить лучшее название).

Alexei Levenkov 10.01.2023 21:21
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
1
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синтаксис (int, int) определяет ValueTuple<int,int>, а не Tuple<int,int>. Измените определение списка на:

List<ValueTuple<int, int>> legalMoves;

И Tuple.Create к ValueTuple.Create

Это, казалось, решило мою первоначальную проблему, но когда я попытался запустить его, это дало мне следующую ошибку в том месте, где он добавляет допустимые ходы в список кортежей: «Ссылка на объект не установлена ​​​​на экземпляр объекта».

Jasper 10.01.2023 20:39

@ Джаспер, ты инициализировал List<>?

Panagiotis Kanavos 10.01.2023 20:43

Спасибо большое, теперь все исправлено!

Jasper 10.01.2023 20:53

Другие вопросы по теме