Словарь C #, 2 значения

Я подозреваю, что это связано с перестановкой переменных и функций. JavaScript приносит все объявления переменных и функций в начало функции, в которой они определены. Дополнительная информация здесь: http://jamesallardice.com/explaining-function-and-variable-hoisting-in-javascript/

Бьюсь об заклад, что Chrome вызывает точку прерывания с переменной, недоступной для области видимости, потому что в функции больше ничего нет. Это работает:

function baz() {
  var x = "foo";

  function bar() {
    console.log(x); 
    debugger;
  };
  bar();
}

Как это делает:

function baz() {
  var x = "foo";

  function bar() {
    debugger;
    console.log(x);     
  };
  bar();
}

Надеюсь, что и / или ссылка выше помогает. Это мой любимый вид вопросов SO, BTW:)

13
задан Jon Skeet 20 April 2010 в 01:34
поделиться

6 ответов

Если вы используете .NET 4, вы можете использовать

Dictionary<string, Tuple<string, string>>

Если нет, вы можете создать свой собственный кортеж , который работает таким же образом :)

В качестве альтернативы, если вам это нужно только в одном месте, вы можете создать свой собственный тип, который аккуратно инкапсулирует две строки, используя соответствующие имена. Например:

public sealed class NameAndAddress
{
    private readonly string name;
    public string Name { get { return name; } }

    private readonly string address;
    public string Address { get { return address; } }

    public NameAndAddress(string name, string address)
    {
        this.name = name;
        this.address = address;
    }
}

Затем вы можете использовать:

Dictionary<string, NameAndAddress>

, что очень ясно дает понять, что будет сохранено.

Вы можете реализовать равенство и т. Д., Если хотите. Лично мне хотелось бы, чтобы подобное было проще - анонимные типы почти делают это, но тогда вы не можете их назвать ...

21
ответ дан 1 December 2019 в 20:29
поделиться

Да, есть именно этот . Вы можете сохранить два своих значения в классе или структуре. Или вы хотите чего-то еще?

0
ответ дан 1 December 2019 в 20:29
поделиться
class A {
  public string X, Y;
}

Dictionary<string, A> data;
6
ответ дан 1 December 2019 в 20:29
поделиться

Создайте структуру, содержащую ваши значения, а затем используйте

Dictionary<string, MyStruct> dict = new Dictionary<string, MyStruct>();
3
ответ дан 1 December 2019 в 20:29
поделиться

Вы можете использовать словарь KeyValuePairs

Dictionary<string,KeyValuePair<string,string>>
0
ответ дан 1 December 2019 в 20:29
поделиться

Создайте класс для хранения вашего значения и сделайте его словарем. Если класс используется только в контексте одного содержащего класса (например, он используется для доставки структуры данных для свойства класса), вы можете сделать свой класс частным вложенным классом.

0
ответ дан 1 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: