Как передать произвольное количество параметров в C # - PullRequest
2 голосов
/ 28 января 2009

ОК. Мне нужно разработать способ, чтобы отслеживать, сколько существует каждого элемента. Есть приблизительно 26 пунктов. Мне также нужен способ узнать, существует ли определенная комбинация предметов.

Например, Это движок для карточной игры. Каждая карта имеет свой тип, и к каждой карте может быть прикреплена карта. Для выполнения определенных действий в игре игрок должен иметь определенную комбинацию карт. Чтобы упростить эту программу, я хотел бы сделать что-то вроде

if (meetsCrit(2, water, 4, ground))
{
    do this()
}
else
{
    displayerror()
}

РЕДАКТИРОВАТЬ: решено!

Я использовал комбинацию техник, описанную в нескольких постах ниже. Специальное упоминание:

Джон Скит, Ринат Абдуллин, Франк,

Во всяком случае, вот что я сделал Я создал класс с именем pair, который хранит искомый тип и номер этого типа. Затем я использовал делегат предиката, чтобы найти все эти типы и посчитать, сколько их, Затем я сравнил его с числом, которое искал, и вернул соответственно true или false.

Это код для него

public bool meetsCrit(params Pair[] specs)
{
    foreach (Pair i in specs)
    {
        if (!(attached.FindAll(delegate(Card c) { return c.type == i.type; }).Count >= i.value))
        {
            return false;
        }

    }
    return true;
}

Ответы [ 13 ]

0 голосов
/ 29 января 2009

Как хранятся эти предметы? Они должны храниться в объекте коллекции предметов. У него должны быть методы, необходимые для проверки его внутренних органов.

Или используйте массив объектов params, реализующий ваш интерфейс IItem.

0 голосов
/ 29 января 2009

Я бы взял предикат, который можно сравнить с вашим источником данных, а затем оценил бы его, вернув результат из предиката.

0 голосов
/ 29 января 2009

Кроме использования ключевого слова params, которое заставит вас добавлять свои элементы в массив, в настоящее время в C # это не поддерживается. C # 4.0 вводит необязательные параметры в язык, но я не уверен, что для вас этого будет достаточно произвольно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...