이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 22445|회답: 0

[출처] C#에서의 제네릭 컬렉션 클래스(Ilist, IDictionary) 사용

[링크 복사]
게시됨 2015. 4. 10. 오후 5:22:50 | | |

IDictionary는 keyValuePair 객체 내의 키-값 쌍으로 구성된 일반적인 키/값 쌍 집합의 기본 인터페이스입니다.

각 쌍은 고유 키를 가져야 합니다. 구현은 키가 빈 참조(Visual Basic에서는 아무것도 없음)로 허용할지 여부에 차이가 있습니다. 이 값은 비어 있는 참조(Visual Basic에서는 아무것도 없음)일 수 있으며 반드시 고유할 필요는 없습니다. IDictionary 인터페이스는 포함된 키와 값을 열거할 수 있지만, 이는 특정 정렬 순서를 의미하지는 않습니다.

C# 언어의 foreach 문(Visual Basic에서는 For Each 및 C++에서는 for each)은 컬렉션 내 각 요소의 타입을 요구합니다. IDictionary의 각 요소는 키/값 쌍이므로, 요소 유형은 키의 타입도 값의 타입도 아닙니다. 대신 KeyValuePair 타입입니다.



간단한 예제 프로그램이 있습니다



엔터티 클래스:

네임스페이스 도메인
{

//订单
    공공 등급 기사
    {
        public int OrderID { get; 세트; }

        /// <summary>
        주문일
        /// </summary>
        공공 DateTime OrderDate { get; 세트; }

        /// <summary>
        주문 주소
        /// </summary>
        public string OrderAdress { get; 세트; }

        /// <summary>
        주문 전화
        /// </summary>
        public string OrderTel { get; 세트; }
    }
}



//订单明细


네임스페이스 도메인
{
    공공 클래스 OrderDetail
    {
        public int DetailID { get; 세트; }

        public int ProductID { get; 세트; }

        /// <summary>
        양
        /// </summary>
        공개 십진법 Quantity { get; 세트; }

        /// <summary>
        단가
        /// </summary>
        공개 십진법 가격 { get; 세트; }
    }
}



//存放数据

System을 사용;
System.Collections.Generic을 사용;
System.Linq를 사용;
System.Text 사용;
도메인을 사용;

네임스페이스 서비스
{
    공용 정적 클래스 OrderStock
    {
        private static IList<Order> m_orderList = 새 List<Order>(); 리스트에 대한 일반 필드를 정의합니다

        공개 정적 IList<Order> OrderList//는 리스트의 일반적인 속성을 정의합니다
        {
            가져오기
            {
                m_orderList 반환;
            }
            세트
            {
                m_orderList = 가치;
            }
        }

        private static IDictionary<Order, IList<OrderDetail>> m_orders = new Dictionary<Order, IList<OrderDetail>>();

//定义了一个Dictionary的泛型字段,

        공개 정적 IDictionary<Order, IList<OrderDetail>> 명령은 사전의 일반적인 속성을 정의합니다
        {
            가져오기
            {
                m_orders 반환;
            }
            세트
            {
                m_orders = 가치;
            }
        }
    }
}



서비스 인터페이스

System을 사용;
도메인을 사용;
네임스페이스 서비스
{
    공개 인터페이스 IOrderService
    {

//删除
        무효 삭제(도메인.오더) entity;

       모두 조회
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        object Save(Domain.Order entity);

//更新
        void Update(Domain.Order entity);

  ID에 의한 쿼리
        명령 Get(object id);

//获取下一个ID
        object GetNextID();
    }



네임스페이스 서비스
{
    공개 인터페이스 IOrderDetailService
    {
        void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entity);
        System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(object id);
        object GetNextDetailID(object mainID);
        object GetNextID();
        System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll();
        object Save(Domain.Order entity, System.Collections.Generic.IList<Domain.OrderDetail> detail);
        void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> entity);
    }
}



서비스 실현

System을 사용;
System.Collections.Generic을 사용;
System.Linq를 사용;
System.Text 사용;
도메인을 사용;

네임스페이스 서비스
{
    공공 등급 명령 서비스 : IOrderService
    {
        공개 IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            리턴 리스트;
        }

        공개 객체 GetNextID()
        {
            정정 ID = 1;
            만약 (OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            신분증 반환;
        }

        공개 객체 Save(Order entity)
        {
            OrderStock.OrderList.Add(법인);

            반환 엔티티. OrderID;
        }

        공공 공허 업데이트(명령 실체)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);

            만약 (목록). 카운<Order>트() > 0)
            {
                주문 순서 = 목록. 퍼스트();
                OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = 엔터티;
            }
        }

        공공 명령 Get(object id)
        {
            순서 엔터티 = null;
            var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id);
            만약 (목록). 카운<Order>트() > 0)
            {
                주문 순서 = 목록. 퍼스트();
                entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)];
            }
            반환 엔터티;
        }

        공공 공백 삭제(명령 실체)
        {
            var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
            만약 (목록). 카운<Order>트() > 0)
            {
                주문 순서 = 목록. 퍼스트();
                주문, 재고, 주문목록, 제거(주문);
            }
        }
    }
}





System을 사용;
System.Collections.Generic을 사용;
System.Linq를 사용;
System.Text 사용;
도메인을 사용;

네임스페이스 서비스
{
    공공 클래스 OrderDetailService : IOrderDetailService
    {
        public IDictionary<Order, IList<OrderDetail>> LoadAll()
        {
            var dic = OrderStock.Orders;

            리턴 DIC;
        }

        공개 객체 GetNextID()
        {
            정정 ID = 1;
            만약 (OrderStock.Orders.Count > 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            신분증 반환;
        }

        public object GetNextDetailID(object mainID)
        {
            정정 ID = 1;
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                var item = dic. First();
                var list = 항목. Value.Where(w => w.DetailID == (int)mainID);
                만약 (목록). 카운<OrderDetail>트() > 0)
                {
                    id = 목록. First(). DetailID + 1;
                }
            }
            신분증 반환;
        }

        공개 객체 저장(Order entity, IList<OrderDetail> 상세)
        {
            객체 결과 = null;
            만약 (! OrderStock.Orders.ContainsKey(엔티티))
            {
                OrderStock.Orders.Add(법인, 상세);
                결과 = 엔터티. OrderID;
            }
            반환 결과;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. 키))
            {
                주문주식.주문[법인. 키] = 실체. 가치;
            }
        }

        public KeyValuePair<Order, IList<OrderDetail>> Get(object id)
        {
           
            KeyValuePair<Order, IList<OrderDetail>> entity = new KeyValuePair<Order, IList<OrderDetail>>();
            var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id);
            if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0)
            {
                entity = dic. First();
            }
            
            반환 엔터티;
        }

        public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            if (OrderStock.Orders.ContainsKey(entity. 키))
            {
                OrderStock.Orders.Remove(entity. 키);
            }
        }
    }
}



테스트

System을 사용;
System.Collections.Generic을 사용;
System.Linq를 사용;
System.Text 사용;
NUnit.Framework를 사용;
서비스;
도메인을 사용;

이름공간 ServiceTest
{
    [테스트픽스처]
    공공 클래스 OrderServiceTest
    {
        민간 IOrderService m_service;

        [설정]
        공공 공허 Init()
        {
            m_service = 새로운 OrderService();
        }

        [테스트]
        public void LoadAllTest()
        {
           var list= m_service. 로드올();
           foreach (리스트 내 var 항목)
           {
               Console.WriteLine(항목. OrderID);
               Console.WriteLine(항목. OrderAaddress);
               Console.WriteLine(항목. 주문일);
               Console.WriteLine(항목. OrderTel);
           }
           Assert.IsNotNull(list);
        }

        [테스트]
        공공 공허 세이브()
        {
            주문 엔터티 = 새로운 주문()
            {
                OrderID = (int)m_service. GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = "우루무치",
                OrderTel = "123123"
            };
            객체 obj = m_service. Save(entity);
           
            Assert.IsNotNull(obj);
        }

        [테스트]
        공공 공허 업데이트 ()
        {
            주문 실체 = m_service. Get(1);
            존재. OrderAaddress = "코를라";
            m_service. Update(entity);
        }

        [테스트]
        공공 공백 삭제()
        {
            주문 실체 = m_service. Get(1);
            존재. OrderAaddress = "코를라";
            m_service. Delete(entity);
        }
    }
}



System을 사용;
System.Collections.Generic을 사용;
System.Linq를 사용;
System.Text 사용;
NUnit.Framework를 사용;
서비스;
도메인을 사용;

이름공간 ServiceTest
{
    [테스트픽스처]
    public class OrderServiceDetailTest
    {
        사설 IOrderDetailService m_service;

        [설정]
        공공 공허 Init()
        {
            m_service = 새로운 OrderDetailService();
        }

        [테스트]
        public void LoadAllTest()
        {
           var list= m_service. 로드올();
           foreach (리스트 내 var 항목)
           {
               Console.WriteLine("-------------- 명령 ----------");
               Console.WriteLine(항목. Key.OrderID);
               Console.WriteLine(항목. 키.순서 주소);
               Console.WriteLine(항목. 키.주문일);
               Console.WriteLine(항목. Key.OrderTel);
               Console.WriteLine("-------------- 주문 세부 사항 ----------");
               foreach (var li in item. 가치)
               {
                   콘솔.WriteLine(li.DetailID);
                   콘솔.WriteLine(li.Price);
                   Console.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(list);
        }

        [테스트]
        공공 공허 세이브()
        {
            정정 ID = (정수)m_service. GetNextID();
            주문 엔터티 = 새로운 주문()
            {
                OrderID = id,
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = "우루무치",
                OrderTel = "123123"
            };
            IList<OrderDetail> list = 새로운 목록<OrderDetail>();
            (정수: i = 0; 저는 3< 있습니다; i++)
            {
                목록. Add(new OrderDetail() {
                    DetailID = i + 1,
                    가격=10+i,
                    수량=i+100,
                    ProductID = 1000 + i
                });
            }
            객체 obj = m_service. Save(entity, list);
           
            Assert.IsNotNull(obj);
        }

        [테스트]
        공공 공허 업데이트 ()
        {
            var entity = m_service. Get(1);

            존재. Value[0] = 새로운 OrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                가격 = 13.34만 달러,
                수량 = 2억 100만
            };
            m_service. Update(entity);
        }

        [테스트]
        공공 공백 삭제()
        {
            var entity = m_service. Get(1);
            m_service. Delete(entity);
        }
    }
}



참고: 테스트 시 nunit.framework 도구를 참조해야 합니다




이전의:스트레스 테스트에 좋은 CC 공격 도구 두 개를 공유하세요
다음:비푸젠은 웨이보에 사과 편지를 올렸습니다: 매우 죄책감과 슬픔을 느낍니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com