Как мне найти значение неуказанной переменной в других объектах того же класса? C#

#c# #class #object #variables #methods

#c# #класс #объект #переменные #методы

Вопрос:

Я хочу, чтобы этот метод работал с любой переменной — т. Е. передавал методу значение «Price», а затем получал общую цену всех товаров.

 private int GetTotalValue(int stat){
    int total = 0;
    foreach(Item i in Vendor.items){
        totalStat  = i.stat;
    }
    return total;
}
  

Однако у него нет способа узнать имя переменной, которую я передал в качестве параметра, и, следовательно, нет способа получить к ней доступ в других объектах.

Как я могу сообщить методу, какую переменную я передаю, а не просто ее значение?

Комментарии:

1. Обычно это делается путем передачи лямбда-выражения. Фактически, в LINQ уже есть метод для этого. total = Vendor.items.Sum(i => i.Price);

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

Ответ №1:

Если вам всегда нужна сумма некоторого значения свойства, вы могли бы инкапсулировать эту логику в метод, например, GetVendorItemSum:

 internal class Program
{
    private static void Main(string[] args)
    {
        var items = new[] {
            new Item {Price = 1},
            new Item {Price = 2}
                            };
        var vendor = new Vendor {Items = items};

        var vendorSum = GetVendorItemsSum(vendor, x => x.Price);
    }

    private static int GetVendorItemsSum(Vendor vendor, Func<Item, int> func)
    {
        return vendor.Items.Sum(func);
    }
}

public class Vendor
{
    public IEnumerable<Item> Items;
}

public class Item
{
    public int Price { get; set; }
}