0

コメント付きのコードで質問を参照してください...

public struct Key
{
    public string Name;
    public object Value;
}


public class PrimaryKey
{
    Dictionary<string, Key> _keys = new Dictionary<string, Key>();

    object this[string index]
    {
        get
        {
            return _keys[index].Value;
        }
        set
        {
            if (!_keys.ContainsKey(index))
                _keys.Add(index, new Key() { Name = index, Value = value });
            else
            {
                var k = _keys[index];        // This compiles
                k.Value = value;             // just fine.

                _keys[index].Value = index;  // So why wouldn't this?
            }
        }
    }
}

エラーが発生します:

Dictionary<string,Key>.this[string]変数ではないため、 の戻り値を変更できません

4

3 に答える 3

2

それは純粋にあなたKeyが構造体であるためです。値がコピーされます..つまり、変更を加えても、新しく破棄されたコピーを変更する以外は実際には何もしません。コンパイラはそれが起こらないようにしています。

それをクラスに変更すると、目的の機能が得られます..しかし、実際にはあなたが望んでいたものではないかもしれません:

public class Key { }
于 2013-10-03T05:47:17.820 に答える
2

構造体であり、構造体は値型であるためKey、メソッド、プロパティ、またはインデクサーを介してアクセスすると、インスタンス自体ではなく、構造体インスタンスのコピーが返されます。Keyとして宣言してみてくださいclass。詳細については、構造体とクラス、または値と参照型の違いを検索できます。

于 2013-10-03T05:45:41.420 に答える