この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 22445|答える: 0

[出典] C#におけるジェネリックコレクションクラス(Ilist、IDictionary)の使用

[リンクをコピー]
掲載地 2015/04/10 17:22:50 | | |

IDictionaryは、keyValuePairオブジェクト内のキー-値ペアの汎用的な集合の基本インターフェースです。

各ペアは固有の鍵を持つ必要があります。 実装はキーを空参照(Visual BasicではNothing)にするかどうかで異なります。 この値は空の参照(Visual Basicでは何もない)でも構いませんし、一意である必要はありません。 IDictionaryインターフェースは、含まれるキーや値の列挙を可能にしますが、特定のソート順序を意味しません。

C#言語のforeach文(Visual BasicではFor Eeach、C++ではfor each)は、コレクション内の各要素の型を必要とします。 IDictionaryの各要素はキー/値のペアであるため、要素タイプはキーの型でも値の型でもありません。 代わりにKeyValuePair型です。



ここに簡単な例プログラムがあります



エンティティクラス:

名前空間ドメイン
{

//订单
    公共階級勲章
    {
        public int OrderID { get; セット; }

        /// <summary>
        発注日
        /// </summary>
        public 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 = 新しいリスト<Order>(); リストのジェネリックフィールドを定義します

        公開の静的IList<Order> OrderList//はリストの一般的なプロパティを定義します
        {
            取得
            {
                返m_orderList;
            }
            セット
            {
                m_orderList = 価値;
            }
        }

        private static IDictionary<Order, IList<OrderDetail>> m_orders = 新しい辞書<Order, IList<OrderDetail>>();

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

        公開静的IDictionary<Order、IList<OrderDetail>>Orders/は辞書の一般的な性質を定義します
        {
            取得
            {
                m_orders返す;
            }
            セット
            {
                m_orders = 価値;
            }
        }
    }
}



サービスインターフェース

Systemを使い、
ドメインを使い、
ネームスペース サービス
{
    パブリックインターフェース IOrderService
    {

//删除
        void Delete(Domain.Order entity);

       全てクエリ
        System.Collections.Generic.IList<Domain.Order> LoadAll();

//保存
        オブジェクト Save(Domain.Order entity);

//更新
        void Update(Domain.Orderエンティティ);

  IDによるクエリ
        Order Get(オブジェクトID);

//获取下一个ID
        オブジェクト 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(オブジェクトID);
        object GetNextDetailID(object mainID);
        オブジェクト 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
    {
        public IList<Order> LoadAll()
        {
            var list = OrderStock.OrderList;

            リターンリスト;
        }

        パブリックオブジェクト GetNextID()
        {
            int id = 1;
            もし(OrderStock.OrderList.Count > 0)
            {
                id = OrderStock.OrderList.Max(m => m.OrderID) + 1;
            }
            返却ID;
        }

        パブリックオブジェクト 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(オブジェクト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)
            {
                順序=リスト。 ファースト();
                OrderStock.OrderList.Remove(注文);
            }
        }
    }
}





Systemを使い、
System.Collections.Genericを使い、
System.Linqを使い、
System.Textを使い、
ドメインを使い、

ネームスペース サービス
{
    公共クラス OrderDetailService : IOrderDetailService
    {
        public IDictionary<Order, IList<OrderDetail>>LoadAll()
        {
            var dic = OrderStock.Orders;

            返却 dic;
        }

        パブリックオブジェクト GetNextID()
        {
            int id = 1;
            もし(OrderStock.Orders.Count 0> 0)
            {
                id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1;
            }
            返却ID;
        }

        public object GetNextDetailID(object mainID)
        {
            int 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 リスト = アイテム。 Value.Where(w => w.DetailID == (int)mainID);
                もし(リスト)。 カウント<OrderDetail>() > 0)
                {
                    id = リスト。 First()。 DetailID + 1;
                }
            }
            返却ID;
        }

        パブリックオブジェクト Save(Order entity, ilist<OrderDetail>詳細)
        {
            オブジェクト結果 = null;
            もし(! OrderStock.Orders.ContainsKey(エンティティ))
            {
                OrderStock.Orders.Add(エンティティ、詳細);
                結果=エンティティ。 OrderID;
            }
            リターン結果;
        }

        public void Update(KeyValuePair<Order, IList<OrderDetail>> entity)
        {
            もし(OrderStock.Orders.ContainsKey(entity. 注))
            {
                OrderStock.Orders[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)
        {
            もし(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();
        }

        [テスト]
        パブリック・ヴォイド LoadAllTest()
        {
           var list=m_service。 LoadAll();
           foreach(リスト内のvar項目)
           {
               Console.WriteLine(item. OrderID);
               Console.WriteLine(item. OrderAaddress);
               Console.WriteLine(item. OrderDate);
               Console.WriteLine(item. OrderTel);
           }
           Assert.IsNotNull(list);
        }

        [テスト]
        パブリック・ヴォイド セーブ()
        {
            オーダーエンティティ = 新しいオーダー()
            {
                OrderID = (int)m_service。 GetNextID(),
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = 「ウルムチ」、
                OrderTel = "123123"
            };
            オブジェクト obj = m_service。 Save(エンティティ);
           
            Assert.IsNotNull(obj);
        }

        [テスト]
        パブリック・ヴォイドアップデート()
        {
            オーダーエンティティ = m_service。 Get(1);
            存在。 OrderAaddress = 「コルラ」;
            m_service。 Update(エンティティ);
        }

        [テスト]
        パブリック・ヴォイド Delete()
        {
            オーダーエンティティ = m_service。 Get(1);
            存在。 OrderAaddress = 「コルラ」;
            m_service。 Delete(エンティティ);
        }
    }
}



Systemを使い、
System.Collections.Genericを使い、
System.Linqを使い、
System.Textを使い、
NUnit.Frameworkを使い、
サービスを利用すること;
ドメインを使い、

名前空間ServiceTest
{
    [テストフィクスチャー]
    public class OrderServiceDetailTest
    {
        民間のIOrderDetailService m_service;

        [セットアップ]
        パブリック・ヴォイド Init()
        {
            m_service = 新しいOrderDetailService();
        }

        [テスト]
        パブリック・ヴォイド LoadAllTest()
        {
           var list=m_service。 LoadAll();
           foreach(リスト内のvar項目)
           {
               Console.WriteLine("命令------------------------");
               Console.WriteLine(item. Key.OrderID);
               Console.WriteLine(item. キー.オーダーアドレス);
               Console.WriteLine(item. キー・オーダー・デート);
               Console.WriteLine(item. Key.OrderTel);
               Console.WriteLine("-------------- Order Detail ----------");
               foreach(var li in item. 価値)
               {
                   Console.WriteLine(li.DetailID);
                   コンソール.WriteLine(li.Price);
                   コンソール.WriteLine(li.Quantity);
                   Console.WriteLine(li.ProductID);
               }
           }
           Assert.IsNotNull(list);
        }

        [テスト]
        パブリック・ヴォイド セーブ()
        {
            int ID = (int)m_service。 GetNextID();
            オーダーエンティティ = 新しいオーダー()
            {
                OrderID = id、
                OrderDate = DateTime.Now.AddDays(-1),
                OrderAaddress = 「ウルムチ」、
                OrderTel = "123123"
            };
            IList<OrderDetail>リスト=新しいリスト<OrderDetail>();
            (int 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 エンティティ = m_service。 Get(1);

            存在。 Value[0] = 新しいOrderDetail()
            {
                ProductID = 1000,
                DetailID = 1,
                価格 = 1334万、
                数量 = 200.1M
            };
            m_service。 Update(エンティティ);
        }

        [テスト]
        パブリック・ヴォイド Delete()
        {
            VAR エンティティ = m_service。 Get(1);
            m_service。 Delete(エンティティ);
        }
    }
}



注意:テスト時にはnunit.frameworkツールを参照する必要があります




先の:ストレステストに良いCC攻撃ツールを2つ共有しましょう
次に:碧福建は微博で謝罪の手紙を発表しました。とても罪悪感と悲しみを感じています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com