forte74 Ответов: 1

Имя pet не существует в текущем контексте


Когда я запускаю этот код, все, что я получаю, это
the name pet does not exists in the current context


и я следую этому учебнику с[^] шаг за шагом не уверен, что происходит .


using System;

class Program
{
    enum PetType
    {
        None,
        Cat = 1,
        Dog = 2
    }

    static void Main()
    {
        // A.
        // Possible user input:
        string value = "Dogfff";

        // B.
        // Try to convert the string to an enum:



        try { PetType pet = (PetType)Enum.Parse(typeof(PetType), value); }

        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);


            pet = PetType.None;
        }

        // C.
        // See if the conversion succeeded:
        if (pet == PetType.Dog)
        {
            Console.WriteLine("Equals dog.");
        }
    }
}


Что я уже пробовал:

************************************************
*
*
*******************************************************************************************************************

NotPolitcallyCorrect

Вам нужно прочитать базовую книгу по программированию на переменную область. Вы объявили "домашнее животное" в области блока try и пытаетесь использовать его вне блока try. питомец находится вне поля зрения.

User 59241

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

The Praveen Singh

Объявить pettype вне блока try

Suvendu Shekhar Giri

Это потому что вы пытаетесь получить доступ pet вне его сферы действия. Вы заявили об этом внутри try блок и попытка получить доступ к нему снаружи. Что вы можете сделать, так это объявить его вне try блокируйте его так, чтобы он был доступен глобально в рамках остальной части вашей программы. Что-то вроде следующего должно помочь-

PetType pet;
try { pet = (PetType)Enum.Parse(typeof(PetType), value); }
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
    pet = PetType.None;
}
// C.
// See if the conversion succeeded:
if (pet == PetType.Dog)
{
     Console.WriteLine("Equals dog.");
}

Надеюсь, это поможет :)

forte74

этот ответ в любом случае не очень помогает... если бы вы могли быть немного более ясными это помогло бы

forte74

как бы я мог объявить домашнее животное вне блока try... и что я должен поместить в блок try тогда

Suvendu Shekhar Giri

Попробуйте пример, которым я поделился

User 59241

Код, который вы показываете в своем вопросе, не является кодом в примере, приведенном в вашей ссылке. Код в ссылке работает, а введенные вами различия-нет. Я не уверен, насколько яснее это можно выразить.

1 Ответов

Рейтинг:
1

CPallini

Как Сувенду Шекхар Гири уже указывалось, что ваш PetType пример, а именно pet плохо ограничен: он доступен только внутри блока try.
Вы должны объявить его перед блоком try и создать его экземпляр внутри самого блока try.

PetType pet;
try
{
   pet = ...


Пожалуйста, смотрите: Переменная и область действия метода в Microsoft .NET[^].

[обновление]
Исправлено, благодаря Ричард.
[/обновление]


Richard MacCutchan

Двойное объявление!

CPallini

ООООООООООО!
Спасибо.