KeyedCollection.Dictionary プロパティとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > KeyedCollection.Dictionary プロパティの意味・解説 

KeyedCollection.Dictionary プロパティ

メモ : このプロパティは、.NET Framework version 2.0 で新しく追加されたものです。

KeyedCollection の検索ディクショナリを取得します。

名前空間: System.Collections.ObjectModel
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Protected ReadOnly Property
 Dictionary As IDictionary(Of TKey, TItem)
Dim value As IDictionary(Of
 TKey, TItem)

value = Me.Dictionary
protected IDictionary<TKey,TItem> Dictionary { get;
 }
protected:
property IDictionary<TKey, TItem>^ Dictionary {
    IDictionary<TKey, TItem>^ get ();
}
/** @property */
protected IDictionary<TKey,TItem> get_Dictionary ()
protected function get Dictionary
 () : IDictionary<TKey,TItem>

プロパティ値
存在する場合は KeyedCollection の検索ディクショナリ。それ以外の場合は null 参照 (Visual Basic では Nothing)。

解説解説

既定では、KeyedCollection には最初の項目の追加時に作成される検索ディクショナリが含まれます。高速な検索を可能にするため、KeyedCollection に項目が追加されると、項目のキーが 1 度だけ抽出され、検索ディクショナリに保存されます。この動作は、KeyedCollection(ジェネリック IEqualityComparer,Int32) コンストラクタを使用し、ディクショナリ作成のしきい値を指定することによりオーバーライドできます。

このプロパティ値を取得することは、O(1) 操作になります。

使用例使用例

このコード例では、ChangeItemKey プロテクト メソッドをオーバーライドして変更可能なキーをサポートする方法、および InsertItem、RemoveItem、ClearItems、および SetItem の各プロテクト メソッドをオーバーライドしてキーとコレクションの整合性を維持する方法を示します。

KeyedCollection クラスおよび MutableKey クラスから派生した MutableKeys コレクションを作成します。MutableKey クラスには、設定可能な Key プロパティが含まれています。新しいキーをプロパティに割り当てると、プロパティ Set アクセス操作子はコレクションの internal (Visual Basic の場合は Friend) ChangeKey メソッドを呼び出して、新しいキーが既存のキーと競合するかどうかをテストします。競合する場合は例外がスローされ、プロパティ値は変更されません。

MutableKey オブジェクトと MutableKeys コレクションの接続を維持するために、また、オブジェクトが 2 つのコレクションの間に挿入されないようにするために、MutableKey クラスには internal (Visual Basic の場合は Friend) Collection フィールドがあります。このフィールドは、InsertItem メソッドなど、コレクションの項目の追加および削除のためのカスタム動作を提供するプロテクト メソッドによって維持されます。このフィールドは、項目がコレクションに追加されるときに設定され、項目が削除されるときにクリアされます。

Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel

' This class demonstrates one way to use the ChangeItemKey
' method to store objects with keys that can be changed. The 
' ChangeItemKey method is used to keep the internal lookup
' Dictionary in sync with the keys of the stored objects. 
'
' MutableKeys stores MutableKey objects, which have an Integer
' Key property that can be set. Therefore, MutableKeys inherits
' KeyedCollection(Of Integer, MutableKey).
'
Public Class MutableKeys
    Inherits KeyedCollection(Of Integer,
 MutableKey)

    ' This parameterless constructor delegates to the base class 
    ' constructor that specifies a dictionary threshold. A
    ' threshold of 0 means the internal Dictionary is created
    ' the first time an object is added.
    '
    Public Sub New()
        MyBase.New(Nothing, 0)
    End Sub
    
    Protected Overrides Function
 GetKeyForItem( _
        ByVal item As MutableKey) As
 Integer

        ' The key is MutableKey.Key.
        Return item.Key   
    End Function

    Protected Overrides Sub
 InsertItem( _
        ByVal index As Integer,
 ByVal newItem As MutableKey)

        If newItem.Collection IsNot Nothing
 Then _
            Throw New ArgumentException("The
 item already belongs to a collection.")

        MyBase.InsertItem(index, newItem)
        newItem.Collection = Me
    End Sub

    Protected Overrides Sub
 SetItem(ByVal index As Integer,
 _
        ByVal newItem As MutableKey)

        Dim replaced As MutableKey = Items(index)

        If newItem.Collection IsNot Nothing
 Then _
            Throw New ArgumentException("The
 item already belongs to a collection.")

        MyBase.SetItem(index, newItem)
        newItem.Collection = Me
        replaced.Collection = Nothing
    End Sub

    Protected Overrides Sub
 RemoveItem(ByVal index As Integer)
        Dim removedItem As MutableKey = Items(index)

        MyBase.RemoveItem(index)
        removedItem.Collection = Nothing
    End Sub

    Protected Overrides Sub
 ClearItems()
        For Each mk As MutableKey
 In Items
            mk.Collection = Nothing
        Next
        
        MyBase.ClearItems()
    End Sub

    Friend Sub ChangeKey(ByVal
 item As MutableKey, _
        ByVal newKey As Integer)

        MyBase.ChangeItemKey(item, newKey)
    End Sub
    
    Public Sub Dump()
        Console.WriteLine(vbLf & "DUMP:")
        If Dictionary Is Nothing
 Then
            Console.WriteLine("    The dictionary has not been
 created.")
        Else
            Console.WriteLine("    Dictionary entries")
            Console.WriteLine("    ------------------")

            For Each kvp As
 KeyValuePair(Of Integer, MutableKey) In
 Dictionary
                Console.WriteLine("    {0} : {1}",
 kvp.Key, kvp.Value)
            Next
        End If

        Console.WriteLine(vbLf & "    List of items")
        Console.WriteLine("    -------------")

        For Each mk As MutableKey
 In Items
            Console.WriteLine("    {0}", mk)
        Next
    End Sub

End Class

Public Class Demo
    
    Public Shared Sub Main()
 

        Dim mkeys As New
 MutableKeys()

        ' The Add method is inherited from Collection.
        '
        mkeys.Add(New MutableKey(110072674, "Widget"))
        mkeys.Add(New MutableKey(110072675, "Sprocket"))

        mkeys.Dump() 
    
        Console.WriteLine(vbLf & "Create and insert a new
 item:")
        Dim test As New
 MutableKey(110072684, "Gear")
        mkeys.Insert(1, test)

        mkeys.Dump()

        Try
            Console.WriteLine(vbLf & "Try to insert the item
 again:")
            mkeys.Insert(1, test)
        Catch ex As ArgumentException
            Console.WriteLine("Error: {0}", ex.Message)
        End Try

        Console.WriteLine(vbLf & "Change the Key property
 of the item:")
        test.Key = 100000072

        mkeys.Dump()

        Try
            Console.WriteLine(vbLf & "Try to set the Key property
 to an existing key:")
            test.Key = 110072674
        Catch ex As ArgumentException
            Console.WriteLine("Error: {0}", ex.Message)
        End Try

        mkeys.Dump()

    End Sub
    
    Private Shared Sub Display(ByVal
 order As MutableKeys) 
        Console.WriteLine()
        For Each item As
 MutableKey In  order
            Console.WriteLine(item)
        Next item
    End Sub
End Class

' This class has a key that can be changed.
' 
Public Class MutableKey

    Public Sub New(ByVal
 newKey As Integer, ByVal
 newValue As String)
        _key = newKey
        Value = newValue
    End Sub 'New
    
    Public Value As String
    Friend Collection As MutableKeys
    
    Private _key As Integer
    Public Property Key As
 Integer 
        Get
            Return _key
        End Get
        Set
            If Collection IsNot Nothing Then
                Collection.ChangeKey(Me, value)
            End If

            _key = value
        End Set
    End Property

    Public Overrides Function
 ToString() As String 
        Return String.Format("{0,9}
 {1}", _key, Value)
    End Function
        
End Class

' This code example produces the following output:
'
'DUMP:
'    Dictionary entries
'    ------------------
'    110072674 : 110072674 Widget
'    110072675 : 110072675 Sprocket
'
'    List of items
'    -------------
'    110072674 Widget
'    110072675 Sprocket
'
'Create and insert a new item:
'
'DUMP:
'    Dictionary entries
'    ------------------
'    110072674 : 110072674 Widget
'    110072675 : 110072675 Sprocket
'    110072684 : 110072684 Gear
'
'    List of items
'    -------------
'    110072674 Widget
'    110072684 Gear
'    110072675 Sprocket
'
'Try to insert the item again:
'Error: The item already belongs to a collection.
'
'Change the Key property of the item:
'
'DUMP:
'    Dictionary entries
'    ------------------
'    110072674 : 110072674 Widget
'    110072675 : 110072675 Sprocket
'    100000072 : 100000072 Gear
'
'    List of items
'    -------------
'    110072674 Widget
'    100000072 Gear
'    110072675 Sprocket
'
'Try to set the Key property to an existing key:
'Error: An item with the same key has already been added.
'
'DUMP:
'    Dictionary entries
'    ------------------
'    110072674 : 110072674 Widget
'    110072675 : 110072675 Sprocket
'    100000072 : 100000072 Gear
'
'    List of items
'    -------------
'    110072674 Widget
'    100000072 Gear
'    110072675 Sprocket
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

// This class demonstrates one way to use the ChangeItemKey
// method to store objects with keys that can be changed. The 
// ChangeItemKey method is used to keep the internal lookup
// Dictionary in sync with the keys of the stored objects. 
//
// MutableKeys stores MutableKey objects, which have an Integer
// Key property that can be set. Therefore, MutableKeys inherits
// KeyedCollection(Of Integer, MutableKey).
//
public class MutableKeys : KeyedCollection<int,
 MutableKey>
{
    // This parameterless constructor delegates to the base class 
    // constructor that specifies a dictionary threshold. A
    // threshold of 0 means the internal Dictionary is created
    // the first time an object is added.
    //
    public MutableKeys() : base(null,
 0) {}
    
    protected override int GetKeyForItem(MutableKey
 item)
    {
        // The key is MutableKey.Key.
        return item.Key;
    }

    protected override void InsertItem(int
 index, MutableKey newItem)
    {
        if (newItem.Collection != null) 
            throw new ArgumentException("The item already
 belongs to a collection.");

        base.InsertItem(index, newItem);
        newItem.Collection = this;
    }

    protected override void SetItem(int
 index, MutableKey newItem)
    {
        MutableKey replaced = Items[index];

        if (newItem.Collection != null) 
            throw new ArgumentException("The item already
 belongs to a collection.");

        base.SetItem(index, newItem);
        newItem.Collection = this;
        replaced.Collection = null;
    }

    protected override void RemoveItem(int
 index)
    {
        MutableKey removedItem = Items[index];

        base.RemoveItem(index);
        removedItem.Collection = null;
    }

    protected override void ClearItems()
    {
        foreach( MutableKey mk in Items )
        {
            mk.Collection = null;
        }
        
        base.ClearItems();
    }

    internal void ChangeKey(MutableKey item, int
 newKey)
    {
        base.ChangeItemKey(item, newKey);
    }
    
    public void Dump()
    {
        Console.WriteLine("\nDUMP:");
        if (Dictionary == null)
        {
            Console.WriteLine("    The dictionary has not been created.");
        }
        else
        {
            Console.WriteLine("    Dictionary entries");
            Console.WriteLine("    ------------------");

            foreach( KeyValuePair<int, MutableKey>
 kvp in Dictionary )
            {
                Console.WriteLine("    {0} : {1}", kvp.Key, kvp.Value);
            }
        }

        Console.WriteLine("\n    List of items");
        Console.WriteLine("    -------------");

        foreach( MutableKey mk in Items )
        {
            Console.WriteLine("    {0}", mk);
        }
    }
}

public class Demo
{
    public static void Main()
    {
        MutableKeys mkeys = new MutableKeys();

        // The Add method is inherited from Collection.
        //
        mkeys.Add(new MutableKey(110072674, "Widget"));
        mkeys.Add(new MutableKey(110072675, "Sprocket"));

        mkeys.Dump();
    
        Console.WriteLine("\nCreate and insert a new item:");
        MutableKey test = new MutableKey(110072684, "Gear");
        mkeys.Insert(1, test);

        mkeys.Dump();

        try
        {
            Console.WriteLine("\nTry to insert the item again:");
            mkeys.Insert(1, test);
        }
        catch(ArgumentException ex)
        {
            Console.WriteLine("Error: {0}", ex.Message);
        }

        Console.WriteLine("\nChange the Key property of the item:");
        test.Key = 100000072;

        mkeys.Dump();

        try
        {
            Console.WriteLine("\nTry to set the Key property
 to an existing key:");
            test.Key = 110072674;
        }
        catch(ArgumentException ex)
        {
            Console.WriteLine("Error: {0}", ex.Message);
        }

        mkeys.Dump();
    }
    
    private static void
 Display(MutableKeys order)
    {
        Console.WriteLine();
        foreach( MutableKey item in order )
        {
            Console.WriteLine(item);
        }
    }
}

// This class has a key that can be changed.
// 
public class MutableKey
{

    public MutableKey(int newKey, string
 newValue)
    {
        _key = newKey;
        Value = newValue;
    } //New
    
    public string Value;
    internal MutableKeys Collection;
    
    private int _key;
    public int Key    
    {
        get
        {
            return _key;
        }
        set
        {
            if (Collection != null)
            {
                Collection.ChangeKey(this, value);
            }

            _key = value;
        }
    }

    public override string ToString()
    {
        return String.Format("{0,9} {1}", _key, Value);
    }
        
}

/* This code example produces the following output:

DUMP:
    Dictionary entries
    ------------------
    110072674 : 110072674 Widget
    110072675 : 110072675 Sprocket

    List of items
    -------------
    110072674 Widget
    110072675 Sprocket

Create and insert a new item:

DUMP:
    Dictionary entries
    ------------------
    110072674 : 110072674 Widget
    110072675 : 110072675 Sprocket
    110072684 : 110072684 Gear

    List of items
    -------------
    110072674 Widget
    110072684 Gear
    110072675 Sprocket

Try to insert the item again:
Error: The item already belongs to a collection.

Change the Key property of the item:

DUMP:
    Dictionary entries
    ------------------
    110072674 : 110072674 Widget
    110072675 : 110072675 Sprocket
    100000072 : 100000072 Gear

    List of items
    -------------
    110072674 Widget
    100000072 Gear
    110072675 Sprocket

Try to set the Key property to an existing key:
Error: An item with the same key has already been added.

DUMP:
    Dictionary entries
    ------------------
    110072674 : 110072674 Widget
    110072675 : 110072675 Sprocket
    100000072 : 100000072 Gear

    List of items
    -------------
    110072674 Widget
    100000072 Gear
    110072675 Sprocket
 */
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
KeyedCollection ジェネリック クラス
KeyedCollection メンバ
System.Collections.ObjectModel 名前空間
IDictionary ジェネリック インターフェイス



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

KeyedCollection.Dictionary プロパティのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



KeyedCollection.Dictionary プロパティのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS