3

ちょっと私はこのような次のコードを持っています

public object RetrieveItemRun(int item)
{
    if (dictionary.ContainsKey(item))
    {
        MessageBox.Show("Retrieving" + item.ToString());
    }
    return dictionary[item];
}

0 のキーを取得しようとすると常にクラッシュします。メッセージ ボックスが表示されるため、ContainsKey メソッドは true ですが、キーから値を取得しようとすると、次のようにクラッシュします。

「指定されたキーは辞書にありませんでした」

4

3 に答える 3

14

キーが存在するかどうかに関係なく、キーを取得しようとしています。コードを次のように変更してみてください。

   public object RetrieveItemRun(int item)
    {
        if (dictionary.ContainsKey(item))
        {
            MessageBox.Show("Retrieving" + item.ToString());
            return dictionary[item];
        }
        return null;
    }

存在する場合は、アイテムを返します。元のコードは、アイテムが存在すると想定して返されます(チェック外)

于 2012-10-16T05:31:25.800 に答える
5

TryGetValueメソッドを使用して例外を回避することもできます。

    public object RetrieveItemRun(int item)
    {
        object result;
        if (dictionary.TryGetValue(item, out result))
        {
            MessageBox.Show("Retrieving" + item);
        }

        return result;
    }
于 2012-10-16T05:41:28.247 に答える
1

単純な 'else' で十分です。キーが null の場合、ContainsKey() メソッドはこの例外をスローします。あなたもそれを処理したほうがいいです。

        try
        {
            if(dictionary.ContainsKey(item))
            {
                MessageBox.Show("Retrieving" + item.ToString());
            }            
            else
            {
                MessageBox.Show("Value not found!");
                return null;
            }
        }
        catch(KeyNotFoundException)
        {
            MessageBox.Show("Null key!");
            return null; 
        }
于 2012-10-16T05:55:59.377 に答える