Получить значение параметра метода при исключении - PullRequest
3 голосов
/ 22 июля 2011

Есть ли способ узнать, что передается методу, когда выбрасывается исключение .eg;Convert.ToBoolean(string mystring) когда выдает исключение FormatException?Здесь я хочу знать, что такое mystring при возникновении исключения?

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Вы все еще можете получить значение переменных внутри блока catch, если оно является либо параметрами, либо переменными, объявленными над блоком try.
Вы должны либо перехватить определенные исключения, такие как аргумент nulllexception / formatexception, либо обернуть отдельные операции внутри метода в блок try / catch, чтобы узнать контекст, в котором было сгенерировано исключение.

void Method(int i, string j)
{
    bool p;

    try
    {

    }
    catch(FormatException e)
    {
      //value of i, j, p are available here.
    }
}

Идеалспособ состоит в том, чтобы проверить возможные ситуации, в которых генерируются исключения (например, formatexceptions), и предотвратить их.Они дороги и прерывают процесс.

2 голосов
/ 22 июля 2011

Вы должны захватить общее исключение (или FormatException) и присвоить свои значения элементу Exception.Data .Или повторно выдать новое исключение с вашими значениями.

с использованием Exception.Data

Как добавить дополнительную информацию

catch (Exception e)
            {
            e.Data.Add("ExtraInfo", "More information.");
            throw e;
            }

Как поймать

 catch (Exception e)
            {
            if (e.Data != null)
                {
            foreach (DictionaryEntry de in e.Data)
                    Console.WriteLine("    The key is '{0}' and the value is: {1}", 
                                                    de.Key, de.Value);                  
                }
            }

// Или просто сгенерировать новое исключение с вашей строкой ...

catch (Exception ex)
{     
     throw new Exception("My string was" + yourString);
}
0 голосов
/ 22 июля 2011

Вы должны просто использовать Boolean.TryParse. Тогда вы можете сказать

bool value;
if(!Boolean.TryParse(myString, out value)) {
    // it didn't parse
}
// it parsed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...