Например,есть объекты apple и onion типа food, и у них есть свойство name и есть объекты map и stone тоже со свойством name.
Как мне к ним обратиться к свойству name не зная имени объекта?
Ну можно через dynamic попробовать если точно знаете что свойства есть, либо через Reflection.
А вообще надо более прдметно знать задачу. Может быть есть смысл сделать базовый класс с нужными полями. Либо интерфейс.
Ну вот например, у каждого объекта в моей программе точно есть свойство name. Я хочу получить имя какого-либо объекта, который имеет свойство name
public static food apple = new food("Яблоко", "25", "Обыкновенное спелое яблоко");
public static food onion = new food("Лук", "30", "Полежавшая луковица, мало кто захочет есть её в сыром виде (Вы думали что здесь будет оружие дальнего боя???)");
public static other map = new other("Карта", "Старая затёртая карта, надорванная в местах складывания");
public class food
{
public string name;
public string food_value;
public string description;
public food(string name, string food_value, string description)
{
this.name = name;
this.food_value = food_value;
this.description = description;
}
}
public class other
{
public string name;
public string description;
public other(string name, string description)
{
this.name = name;
this.description = description;
}
private void Button8_Click(object sender, EventArgs e)
{
if (BackpackLNames.Contains(.name)) // что можно сделать здесь?
{
textBox3.Text = "Вы выбросили " + // и здесь
int x = BackpackLNames.IndexOf(.name); // и здесь тоже
BackpackLNames[x] = empty.name;
BackpackLObjects[x] = empty;
А задача-то какая, для чего это? Такое обычно решают наследованием или интерфейсами.
Для упрощения создания программы. Чтобы не прописывать свойство каждого объекта
BackpackLObjects
это что, какого типа?
Тут же видимо какой-то инвентарь с разными предметами. Так что логично например создать базовый класс Item
и наследовать всё от него.
И непонятно у чего .name
получить-то надо. В коде Button8_Click
не видно никаких определений “текущего” предмета.
BackpackLObjects
это что, какого типа?
public static List<object> BackpackLNames = new List<object>();
public static List<object> BackpackLObjects = new List<object>();
В одном списке свойства объектов name, в другом сами объекты
class Food:
{
public string name;
}
class Apple: Food
{
public int NyamNyam = 100;
}
public List<Food> Foods= new List<Food>();
var tmp = new Apple();
tmp.Name = "Абрикос";
Foods.Add(tmp );
И непонятно у чего
.name
получить-то надо. В кодеButton8_Click
не видно никаких определений “текущего” предмета.
.name надо получить у объекта, свойство name которого выводится при выборе предмета
Slot1.Text = Convert.ToString(BackpackLNames[0]); //
private void Slot1_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string txt = btn.Text;
int x = BackpackLNames.IndexOf(txt);
if (BackpackLObjects[x].GetType() == typeof(emptyClass))
{
textBox3.Text = "Здесь ничего нет";
}
else if (BackpackLObjects[x].GetType() == typeof(food))
{
textBox3.Text = "Вы выбрали " + txt.ToLower();
}
Так сделайте как я написал и имя будет выводится из каждого объекта.
Не надо никаких списков делать.
BackpackLNames
не нужен если имена предметов не повторяются. Можно просто Dictionary
. (а если повторяются, то тут тоже странно получится: выбрали яблоко во второй ячейке, а на самом деле взялось первое)
А про то, как сами объекты сделать, выше было же.
class Item
{
public string Name;
public Item(string name)
{
Name = name;
}
}
class Food : Item
{
public int Value;
public Food(string name, int value) : base(name)
{
Value = value;
}
}
new Food("Яблоко", 25)
new Food("Лук", 30)
new Item("Карта")
И список/Dictionary объявить с типом Item
.
Извините, но я просто отвечал на вопросы и скидывал готовый код