#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; }
}