この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IDictionary インターフェイス

 

公開日: 2016年10月

キー/値ペアの非ジェネリック コレクションを表します。

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

[ComVisibleAttribute(true)]
public interface IDictionary : ICollection, IEnumerable

名前説明
System_CAPS_pubpropertyCount

ICollection に格納されている要素の数を取得します。(ICollection から継承されます。)

System_CAPS_pubpropertyIsFixedSize

示す値を取得するかどうか、 IDictionary オブジェクトのサイズが固定されています。

System_CAPS_pubpropertyIsReadOnly

示す値を取得するかどうか、 IDictionary オブジェクトは読み取り専用です。

System_CAPS_pubpropertyIsSynchronized

ICollection へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。(ICollection から継承されます。)

System_CAPS_pubpropertyItem[Object]

指定したキーを持つ要素を取得または設定します。

System_CAPS_pubpropertyKeys

取得、 ICollection オブジェクトのキーを含む、 IDictionary オブジェクトです。

System_CAPS_pubpropertySyncRoot

ICollection へのアクセスを同期するために使用できるオブジェクトを取得します。(ICollection から継承されます。)

System_CAPS_pubpropertyValues

取得、 ICollection オブジェクトの値を含む、 IDictionary オブジェクトです。

名前説明
System_CAPS_pubmethodAdd(Object, Object)

指定したキーおよび値を持つ要素を IDictionary オブジェクトに追加します。

System_CAPS_pubmethodClear()

IDictionary オブジェクトからすべての要素を削除します。

System_CAPS_pubmethodContains(Object)

指定したキーを持つ要素が IDictionary オブジェクトに格納されているかどうかを確認します。

System_CAPS_pubmethodCopyTo(Array, Int32)

ICollection の要素を Array にコピーします。Array の特定のインデックスからコピーが開始されます。(ICollection から継承されます。)

System_CAPS_pubmethodGetEnumerator()

IDictionary オブジェクトの IDictionaryEnumerator オブジェクトを返します。

System_CAPS_pubmethodRemove(Object)

指定したキーを持つ要素を IDictionary オブジェクトから削除します。

名前説明
System_CAPS_pubmethodAsParallel()

オーバーロードされます。クエリの並列化を有効にします。(ParallelEnumerable によって定義されています。)

System_CAPS_pubmethodAsQueryable()

オーバーロードされます。 IEnumerableIQueryableに変換します。 (Queryable によって定義されています。)

System_CAPS_pubmethodCast<TResult>()

要素をキャスト、 IEnumerable 指定した型にします。(Enumerable によって定義されています。)

System_CAPS_pubmethodOfType<TResult>()

要素をフィルター処理、 IEnumerable 、指定した型に基づいています。(Enumerable によって定義されています。)

IDictionary インターフェイスは、キー/値ペアの非ジェネリック コレクションの基本インターフェイスです。 このインターフェイスのジェネリック バージョンは、 System.Collections.Generic.IDictionary<TKey, TValue>です。

各要素に格納されているキー/値ペアは、 DictionaryEntry オブジェクトです。

各ペアには、一意キーを持つ必要があります。 Null にするキーを許可するかどうかでは、実装が異なります。 値は null にすることができが既に存在する必要はありません。 IDictionary インターフェイスにより、格納されているキーと値を指定する場合は、特定の並べ替え順序を意味しません。

IDictionary 実装は、3 つのカテゴリに分類します。 読み取り専用で、固定サイズ、可変サイズ。 読み取り専用 IDictionary オブジェクトは変更できません。 固定サイズ IDictionary オブジェクトは、加算または要素の削除はできませんが、既存の要素の変更はできます。 可変サイズ IDictionary オブジェクトは、追加、削除、および要素の変更を許可します。

foreach C# 言語のステートメント (For Each Visual Basic で)、コレクション内の要素の型のオブジェクトを返します。 各要素から、 IDictionary オブジェクトは、キー/値ペアで要素型は、キーの型または値の型ではありません。 代わりに、要素型は DictionaryEntryです。 例:

foreach (DictionaryEntry de in myDictionary)
{
    //...
}

foreach ステートメントはからの読み取りだけに書き込まず、コレクションは、列挙子のラッパーです。

実装時の注意:

実装するクラスには、キーを比較するための手段が必要です。

次のコード例を実装する単純な辞書クラスを定義する方法を示します、 IDictionary インターフェイスです。

using System;
using System.Collections;

// This class implements a simple dictionary using an array of DictionaryEntry objects (key/value pairs).
public class SimpleDictionary : IDictionary
{
    // The array of items
    private DictionaryEntry[] items;
    private Int32 ItemsInUse = 0;

    // Construct the SimpleDictionary with the desired number of items.
    // The number of items cannot change for the life time of this SimpleDictionary.
    public SimpleDictionary(Int32 numItems)
    {
        items = new DictionaryEntry[numItems];
    }


    #region IDictionary Members
    public bool IsReadOnly { get { return false; } }
    public bool Contains(object key)
    {
       Int32 index;
       return TryGetIndexOfKey(key, out index);
    }
    public bool IsFixedSize { get { return false; } }
    public void Remove(object key)
    {
        if (key == null) throw new ArgumentNullException("key");
        // Try to find the key in the DictionaryEntry array
        Int32 index;
        if (TryGetIndexOfKey(key, out index))
        {
            // If the key is found, slide all the items up.
            Array.Copy(items, index + 1, items, index, ItemsInUse - index - 1);
            ItemsInUse--;
        } 
        else
        {
            // If the key is not in the dictionary, just return. 
        }
    }
    public void Clear() { ItemsInUse = 0; }
    public void Add(object key, object value) 
    {
        // Add the new key/value pair even if this key already exists in the dictionary.
        if (ItemsInUse == items.Length)
            throw new InvalidOperationException("The dictionary cannot hold any more items.");
        items[ItemsInUse++] = new DictionaryEntry(key, value);
    }
    public ICollection Keys
    {
        get
        {
            // Return an array where each item is a key.
            Object[] keys = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                keys[n] = items[n].Key;
            return keys;
        }
    }
    public ICollection Values
    {
        get
        {
            // Return an array where each item is a value.
            Object[] values = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                values[n] = items[n].Value;
            return values;
        }
    }
    public object this[object key]
    {
        get
        {   
            // If this key is in the dictionary, return its value.
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; return its value.
                return items[index].Value;
            } 
            else
            {
                // The key was not found; return null.
                return null;
            }
        }

        set
        {
            // If this key is in the dictionary, change its value. 
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; change its value.
                items[index].Value = value;
            } 
            else
            {
                // This key is not in the dictionary; add this key/value pair.
                Add(key, value);
            }
        }
    }
    private Boolean TryGetIndexOfKey(Object key, out Int32 index)
    {
        for (index = 0; index < ItemsInUse; index++)
        {
            // If the key is found, return true (the index is also returned).
            if (items[index].Key.Equals(key)) return true;
        }

        // Key not found, return false (index should be ignored by the caller).
        return false;
    }
    private class SimpleDictionaryEnumerator : IDictionaryEnumerator
    {
        // A copy of the SimpleDictionary object's key/value pairs.
        DictionaryEntry[] items;
        Int32 index = -1;

        public SimpleDictionaryEnumerator(SimpleDictionary sd)
        {
            // Make a copy of the dictionary entries currently in the SimpleDictionary object.
            items = new DictionaryEntry[sd.Count];
            Array.Copy(sd.items, 0, items, 0, sd.Count);
        }

        // Return the current item.
        public Object Current { get { ValidateIndex(); return items[index]; } }

        // Return the current dictionary entry.
        public DictionaryEntry Entry
        {
            get { return (DictionaryEntry) Current; }
        }

        // Return the key of the current item.
        public Object Key { get { ValidateIndex();  return items[index].Key; } }

        // Return the value of the current item.
        public Object Value { get { ValidateIndex();  return items[index].Value; } }

        // Advance to the next item.
        public Boolean MoveNext()
        {
            if (index < items.Length - 1) { index++; return true; }
            return false;
        }

        // Validate the enumeration index and throw an exception if the index is out of range.
        private void ValidateIndex()
        {
            if (index < 0 || index >= items.Length)
            throw new InvalidOperationException("Enumerator is before or after the collection.");
        }

        // Reset the index to restart the enumeration.
        public void Reset()
        {
            index = -1;
        }
    }
    public IDictionaryEnumerator GetEnumerator()
    {
        // Construct and return an enumerator.
        return new SimpleDictionaryEnumerator(this);
    }
    #endregion

    #region ICollection Members
    public bool IsSynchronized { get { return false; } }
    public object SyncRoot { get { throw new NotImplementedException(); } }
    public int Count { get { return ItemsInUse; } }
    public void CopyTo(Array array, int index) { throw new NotImplementedException(); }
    #endregion

    #region IEnumerable Members
    IEnumerator IEnumerable.GetEnumerator() 
    {
        // Construct and return an enumerator.
        return ((IDictionary)this).GetEnumerator();
    }
    #endregion
}

public sealed class App
{
    static void Main()
    {
        // Create a dictionary that contains no more than three entries.
        IDictionary d = new SimpleDictionary(3);

        // Add three people and their ages to the dictionary.
        d.Add("Jeff", 40);
        d.Add("Kristin", 34);
        d.Add("Aidan", 1);

        Console.WriteLine("Number of elements in dictionary = {0}", d.Count);

        Console.WriteLine("Does dictionary contain 'Jeff'? {0}", d.Contains("Jeff"));
        Console.WriteLine("Jeff's age is {0}", d["Jeff"]);

        // Display every entry's key and value.
        foreach (DictionaryEntry de in d)
        {
            Console.WriteLine("{0} is {1} years old.", de.Key, de.Value);
        }

        // Remove an entry that exists.
        d.Remove("Jeff");

        // Remove an entry that does not exist, but do not throw an exception.
        d.Remove("Max");

        // Show the names (keys) of the people in the dictionary.
        foreach (String s in d.Keys)
            Console.WriteLine(s);

        // Show the ages (values) of the people in the dictionary.
        foreach (Int32 age in d.Values)
            Console.WriteLine(age);
    }
}

// This code produces the following output.
//
// Number of elements in dictionary = 3
// Does dictionary contain 'Jeff'? True
// Jeff's age is 40
// Jeff is 40 years old.
// Kristin is 34 years old.
// Aidan is 1 years old.
// Kristin
// Aidan
// 34
// 1

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: