В C# для динамического доступа к свойствам класса, имена которых хранятся в переменных, можно использовать рефлексию. Рефлексия позволяет вам получать информацию о типе на этапе выполнения и взаимодействовать с его членами, включая свойства и методы.
Вот пример, как это можно реализовать в вашем случае:
```csharp
using System;
using System.Reflection;
class MyData
{
public int money { get; set; } = 0;
}
class Program
{
static void Main(string[] args)
{
MyData myData = new MyData();
string prop = "money";
// Получение типа MyData
Type type = typeof(MyData);
// Получение свойства с именем, хранящимся в переменной prop
PropertyInfo propertyInfo = type.GetProperty(prop);
if (propertyInfo != null)
{
// Извлечение текущего значения свойства
int currentValue = (int)propertyInfo.GetValue(myData);
Console.WriteLine($"Текущее значение money: {currentValue}");
// Увеличение значения свойства на 1
propertyInfo.SetValue(myData, currentValue + 1);
// Печать нового значения для проверки
Console.WriteLine($"Новое значение money: {propertyInfo.GetValue(myData)}");
}
else
{
Console.WriteLine($"Свойство с именем {prop} не найдено.");
}
}
}
```
### Объяснение кода:
1. Мы создаем класс `MyData`, который содержит свойство `money`.
2. В методе `Main` создаем экземпляр `MyData` и задаем имя свойства, которое хотим изменить (в данном случае — "money").
3. Используем `Type.GetProperty()`, чтобы получить информацию о свойстве, соответствующем имени, хранящемуся в переменной.
4. Проверяем, существует ли такое свойство, а затем получаем его текущее значение с помощью `GetValue()`.
5. Увеличиваем значение свойства на 1 с помощью `SetValue()`.
6. Печатаем новое значение для проверки изменений.
Таким образом, вы можете динамически изменять значения свойств, опираясь на имена, хранящиеся в переменных, используя рефлексию в C#.