Внимательно прочитайте ошибки, которые выдает компилятор:
(5,5): ошибка CS0818: неявно типизированный декларатор локальной переменной должен включать инициализатор
Итак, это говорит о том, что если вы используете неявно типизированную локальную переменную, вам нужно ее инициализировать. Причина в том, что если вы не инициализируете его, как компилятор определит тип?
Это нормально:
var s = "Hello"; //this works because the compiler can figure out s is
//a string because you are initializing it with the
//string "Hello".
Но это не так:
var s; //this fails because the compiler doesn't know what type s is.
s = "Hello";
Теперь вы можете избежать этого, не используя неявно типизированные переменные для начала; просто используйте явно типизированные переменные. Это прекрасно работает:
string s; //the compiler doesn't have to figure out anything,
//s is a string, period.
s = "Hello";
Хорошо, теперь мы знаем, что компилятор не может понять, что такое person
. Как только это станет ясно, вы должны понимать, что объявление person
не удалось, и, следовательно, компилятор полностью его проигнорирует, , но , и он будет продолжать пытаться осмыслить остальную часть вашего кода настолько, насколько он can.
Итак, когда станет ясно, что переменная person
не существует в том, что касается компилятора, следующие две ошибки имеют смысл:
(6 , 5): ошибка CS0841: локальная переменная «персона» не может быть использована до ее объявления (7,26): ошибка CS0841: локальная переменная «персона» не может быть использована до того, как она объявлена
Компилятор просто говорит вам, что вы пытаетесь использовать переменную с именем person
, которая никогда не была объявлена. Один раз, когда вы пытаетесь инициализировать его: person = Tuple.Create("John", "Doe");
, и один раз, когда вы пытаетесь получить к нему доступ: string s = "Hello, " + person.Item1 + ", " + person.Item2;
Исправьте объявление, и все будет работать.