Я подозреваю, что это связано с перестановкой переменных и функций. 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:)
Если вы используете .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>
, что очень ясно дает понять, что будет сохранено.
Вы можете реализовать равенство и т. Д., Если хотите. Лично мне хотелось бы, чтобы подобное было проще - анонимные типы почти делают это, но тогда вы не можете их назвать ...
Да, есть именно этот . Вы можете сохранить два своих значения в классе или структуре. Или вы хотите чего-то еще?
class A {
public string X, Y;
}
Dictionary<string, A> data;
Создайте структуру, содержащую ваши значения, а затем используйте
Dictionary<string, MyStruct> dict = new Dictionary<string, MyStruct>();
Вы можете использовать словарь KeyValuePairs
Dictionary<string,KeyValuePair<string,string>>
Создайте класс для хранения вашего значения и сделайте его словарем. Если класс используется только в контексте одного содержащего класса (например, он используется для доставки структуры данных для свойства класса), вы можете сделать свой класс частным вложенным классом.