2015-04-28 4 views
1

Я пытаюсь вычислить сумму имущества, названного как Total, GrandTotal. То, что я хочу, чтобы это сделать, что GrandTotal вычисляет сумму всех Total, это, как я попробовал:Рассчитать сумму имущества

public class ItemProperties 
     { 
      public int Item { get; set; } 
      public string Description { get; set; } 
      public int Quantity { get; set; } 
      public int UnitPrice { get; set; } 
      public int Tax { get; set; } 
      public int TotalTax { get { return ((Quantity * UnitPrice) * Tax) /100 ; } } 
      public int Total { get { return (Quantity * UnitPrice) + TotalTax; } } 

      public int GrandTotal 
      { 
       get 
       { 
        foreach (var l in Total) //Error 
         l += Total;   // Error 
        return l;    //Error 
       } 
      } 
     } 

Класс ItemProperties добавлен с помощью метода Add() два раза люблю это: (Так Total оказываю различные значения с каждой надстройки)

Items.Add(new ItemProperties { 
    Item = Convert.ToInt32(lines[i]), 
    Description = lines[i + 1], 
    Quantity = Convert.ToInt32(lines[i + 2]), 
    UnitPrice = Convert.ToInt32(lines[i + 3]), 
    Tax = Convert.ToInt32(lines[i + 4]) 
}); 
Items.Add(new ItemProperties { 
    Item = Convert.ToInt32(lines[i + 5]), 
    Description = lines[i + 6], 
    Quantity = Convert.ToInt32(lines[i + 7]), 
    UnitPrice = Convert.ToInt32(lines[i + 8]), 
    Tax = Convert.ToInt32(lines[i + 9]) 
}); 

не беспокойтесь о lines переменных, они не имеют отношения .. Единственное, что я хочу, что GrandTotal вычислить сумму все общие свойства.

+1

В свойстве GrantTotal вы пытаетесь перебрать целое число вместо перечислимого. Вы должны создать расширение для своих элементов. –

+2

Что значит «всего единичного имущества»? Обычно «total» вычисляется по некоторому набору, обычно с чем-то вроде «items.Sum (i => i.Property)» –

+0

Странно, что GrandTotal находится на том же уровне, что и Total. Логично было бы иметь смысл быть выше уровня, поэтому вы можете получить общее количество из своей коллекции предметов. – aw04

ответ

5

Вы не можете выполнить foreach на то, что не перечислим - и вашу Total свойства является int, не IEnumerable.

Ваше GrandTotal свойство должно, вероятно, будет в классе, который содержит коллекцию ItemProperties, ваш код будет выглядеть что-то похожее на это:

public ItemProperties[] MyItems { get; set; } 

public int GrandTotal 
{ 
    get 
    { 
     var total = 0; 
     foreach (var item in MyItems) 
      total += item.Total; 

     return total; 
    } 
} 

Или, если вы хотите использовать LINQ:

public List<ItemProperties> MyItems { get; set; } 

public int GrandTotal 
{ 
    get { return MyItems.Sum(item => item.Total); } 
} 

Обратите внимание, что я сохранил этот простой и не включенный код нулевой проверки и т. Д. - это упражнение для вас.

+0

Я вижу. Благодарю. У вас есть какие-либо советы о том, как получить сумму 'Total'?' –

+0

Спасибо вам большое! –

+0

Без проблем, пожалуйста! – slugster

1

Итого не является IEnumerable (например, списком). Не имеет смысла пытаться предоставить свойство GrandTotal по одному праву? То, что вы, вероятно, хотите здесь есть способ получить GrandTotal для List<ItemProperties>, который вы будете использовать код, очень похожий на то, что у вас есть:

List<ItemProperties> ListOfItems = new List<ItemProperties>(); 
// fill the list 
int sum; 

foreach (ItemProperties ip in ListOfItems) 
{ 
    sum += ip.Total; 
} 

Вы также можете использовать LINQ, чтобы сделать это вместо явного цикла Еогеасп :

int sum = ListOfItems.Sum(x => x.Total); 
3

Вы не можете рассчитывать на GrandTotal отдельного элемента. Вам нужно сделать это в коллекции предметов. Свойство не имеет смысла в отдельном элементе и должно быть удалено.

C# обеспечивает простой способ вычисления общего:

var grandTotal = Items.Sum(item => item.Total); 

Если вам нужно explse класса, который имеет GrandTotal свойство, завернуть список в пользовательском классе, и поставить свойство на ItemPropertiesList класса.

Смежные вопросы