2014-09-30 3 views
2

Я намеренно бросаю исключение для конкретного сценария, но я хотел бы получить сообщение об ошибке в строчном формате. Я знаю, что одна из перегрузок для следующего исключения: string message, но как мне получить доступ к этой строке?Получить сообщение об исключении вручную

Вот соответствующий фрагмент кода:

string errMsg; 

private void Compress() 
{ 
    if (sourcePath.EndsWith(".zip")) 
    { 
     throw new FileLoadException 
        ("File already compressed. Unzip the file and try again."); 
     errMsg = //I want the above string here 
    } 
} 
+1

, что код недостижим «ERRMSG = // Я хочу вышеуказанную строку здесь» –

+1

Как вы упоминали уже в комментарий, вы новичок в обработке ошибок. Одна вещь, о которой вам следует подумать, - это то, что вам действительно нужно исключение в этом месте (если оно в том же самом случае, если вам нужно его поймать, тогда возникает вопрос: действительно ли это исключение или «просто» srting errMsg, быть установленным) – Thomas

+0

@Thomas Я бы сказал «нет», это не нужно, но все мои текущие проекты также посвящены изучению C#, который включает в себя изучение способов обработки ошибок. В идеале я бы просто отключил функцию со строкой, да. – Wolfish

ответ

8

ли вы имеете в виду это :?

try 
{ 
    throw new FileLoadException 
       ("File already compressed. Unzip the file and try again."); 
} 
catch (Exception ex) 
{ 
    errMsg = ex.GetBaseException().Message; 
} 
+2

Это именно то, что я искал. Простите меня, если это был глупый вопрос, содержание обучения, которое я использовал для изучения C#, не покрывало многих ошибок обработки ошибок. – Wolfish

+3

@ Вольфриш Один урок: Нет, нет глупых вопросов. Вы ничего не знали и спрашивали не больше, и это то, что stackoverflow собирается задавать вопросы, на которые вы не знаете/не найдете ответы. – Thomas

+0

@ Томас я согласен ... но горстка downvoters не согласна :) – Wolfish

2

Вы не можете получить доступ к строке ТАМ я объясню немного там:

string errMsg; 

private void Compress() 
{ 
    if (sourcePath.EndsWith(".zip")) 
    { 
     throw new FileLoadException 
        ("File already compressed. Unzip the file and try again."); 
     // The following line is unreachable as the throw ends the function and gets the exception to the calling function as there is no try catch block to catch the exception. 
     errMsg = //I want the above string here 
    } 
} 

Возможность будет в try/catch исключением в способе, в котором вы хотите установить переменную:

private void Compress() 
{ 
    if (sourcePath.EndsWith(".zip")) 
    { 
     try 
     { 
      throw new FileLoadException 
         ("File already compressed. Unzip the file and try again."); 
     } 
     catch (Exception e) 
     { 
      errMsg = e.Message; 
     } 
    } 
} 

Или поймать исключение в вызывающем методе вместо:

try 
{ 
    Compress(); 
} 
catch (Exception e) 
{ 

} 

независимо от используемого метода e.Message предоставляет сообщение об исключении в виде строки.

0

Не уверен, что я 100% понимаю, но если вы хотите, чтобы сообщение от этого исключения вы можете поймать и изучить Exception.Message

 try 
     { 
      throw new FileLoadException("Custom error string"); 
     } 
     catch (Exception exception) 
     { 
      Console.WriteLine(exception.Message); 
     } 
+0

Ах слишком, спасибо, отредактировал. – MaxJ

0

здесь должна быть решением для вас :)

 if (sourcePath.EndsWith(".zip")) 
     { 
      FileLoadException ex = new FileLoadException("File already compressed. Unzip the file and try again."); 
      errMsg = ex.ToString(); 
     } 
     Console.WriteLine(errMsg); 

Чтобы бросить исключение, которое вы сделали бы я сделал soemthing как это

static string sourcePath = "test.zip"; //hardcoded file 
    static string errMsg; //the error string 

    private static void Compress() 
    { 
     try 
     { 

      if (!sourcePath.EndsWith(".zip")) 
      { 
       Console.WriteLine("File doesn't end with zip so it can be compressed"); //if it does not end with zip its rdy for compressing and here you can indput your code to compress 
      } 
      else 
      { 
       throw new Exception(); //instead of using try catch you can also generate the code in here instead of throwing an exception. 
             //when throwing a new exception you make it stop the if setting and jump into the catch if you use break it wont enter the catch but instead it will just jump over it. 
      } 
     } 
     catch 
     { 
      //Here it will generate the custom exception you wanted and put it inside the errMsg 
      errMsg = new FileLoadException("File already compressed. Unzip the file and try again.").ToString(); 
      Console.WriteLine(errMsg); 
     } 

из c это сделано в консоли, поэтому я использую console.writeline, вы можете просто изменить их.

+0

А как насчет исключения, а не просто его создания? –

+0

как правило, я бы использовал попытку catch, как все вышеизложенное использует, но я только понял ваш вопрос, как то, что вы хотели, чтобы fileloadexception находился в вашем errMsg, и это просто делает это? нельзя переписывать, чтобы быть только в одной строке, но сделал это так, чтобы вы это поняли. если вы arent собираетесь получить сбой в вашем случае, если он не будет вводить catch, поэтому, если вы используете a, если он просто проверит, закончится ли файл с zip, он никогда не войдет в catch. в основном я отредактирую его с новым, как я бы выбрал экспимент – BlackStarHH

1

Нет смысла пытаться поймать исключение и установить сообщение. Если вы не повторно бросить его

try 
{ 
    throw new FileLoadException("File already compressed. Unzip the file and try again."); 

} 
catch (Exception ex) 
{ 
    errMsg = ex.GetBaseException().Message; 
    throw; 
} 

я предпочел бы сделать это

private void Compress() 
{ 
    if (sourcePath.EndsWith(".zip")) 
    { 
     errMsg = "File already compressed. Unzip the file and try again."; 
     return; 
    } 
} 
+0

Я буду иметь это в виду для будущих проектов. Этот проект, однако, также посвящен обучению самого себя, поэтому я изучаю функции и методы. – Wolfish

Смежные вопросы