shoppingcart.cs

来自「ibatis源码及帮助文档(IBatis源码+xsd+帮助)」· CS 代码 · 共 127 行

CS
127
字号

using System;
using System.Collections;

using IBatisNet.Common.Pagination;
using NPetshop.Domain.Catalog;

namespace NPetshop.Domain.Shopping
{

	[Serializable]
	public class ShoppingCart : IEnumerable	
	{
		#region Private Fields
		private IPaginatedList _cartLines = new PaginatedArrayList(4);
		#endregion

		#region Properties

		public IPaginatedList Lines 
		{
			get{ return _cartLines; }
		}

		public bool IsEmpty
		{
			get{ return _cartLines.Count == 0; }
		}

		public decimal Total
		{
			get
			{
				decimal total = 0;
				IEnumerator lines = GetAllLines();
				while (lines.MoveNext())
				{
					ShoppingCartLine line = (ShoppingCartLine) lines.Current;
					total += line.Total;
				}
				return total;
			}
		}
		#endregion

		#region Pulbic methods
		public IEnumerator GetEnumerator()
		{
			return _cartLines.GetEnumerator();
		}

		public IEnumerator GetAllLines() 
		{
			ArrayList allItems = new ArrayList();
			int index = _cartLines.PageIndex;
			_cartLines.GotoPage(0);

			foreach(ShoppingCartLine line in _cartLines)
			{
				allItems.Add(line);
			}
			while (_cartLines.NextPage()) 
			{
				foreach(ShoppingCartLine line in _cartLines)
				{
					allItems.Add(line);
				}
			}
			
			_cartLines.GotoPage(index);
			return allItems.GetEnumerator();
		}

		public void Add(ShoppingCartLine newLine){
			ShoppingCartLine existingLine = FindLine(newLine);
			if (existingLine != null) 
			{
				existingLine.Quantity += newLine.Quantity;
			}
			else 
			{
				_cartLines.Add(newLine);
			}
		}

		public void Add(Item item){
			ShoppingCartLine existingLine = FindLine(item);
			if (existingLine != null) 
			{
				existingLine.Quantity += 1;
			}
			else 
			{
				_cartLines.Add(new ShoppingCartLine(item));
			}
		}
		
		public void RemoveLine(ShoppingCartLine otherLine){
			RemoveLine(otherLine.Item);
		}

		public void RemoveLine(Item item){
			foreach (ShoppingCartLine line in _cartLines)
			{
				if (line.Item.Product.Name  == item.Product.Name)
				{
					_cartLines.Remove(line);
					break;
				}
			}
		}

		public ShoppingCartLine FindLine(ShoppingCartLine otherLine){
			return FindLine(otherLine.Item);
		}

		public ShoppingCartLine FindLine(Item item){
			foreach (ShoppingCartLine line in _cartLines){
				if (line.Item.Product.Name == item.Product.Name){
					return line;
				}
			}
			return null;
		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?