2010-10-19 2 views
0

У меня есть класс, который преимущественно состоит из сбора ввода строки и последующего вывода данных в определенном формате. Результатом класса является переопределение ToString().C# Обработка исключений

С моим классом у меня есть статический метод string Print(string path), который считывает входы из плоского файла. Затем он анализирует эти входы и генерирует экземпляр класса для каждой записи в плоском файле. Затем для каждого экземпляра класса я вызываю class.ToString() и добавляю его в строковый конструктор, который в конечном итоге возвращается в пределах Print().

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

Когда возникает случай исключения, я хочу, чтобы все, что находится в строковой добавке, добавляло материал для очистки закрывающего тега, а затем добавляло текст исключения в строковый конструктор, а затем возвращал (Exception Error Text + stringbuilder.ToString() + FooterStuff).

Редактировать код:

Это не могло бы быть на самом деле хорошая идея бросить исключение, я мог бы просто нужно использовать попробовать {} поймать {}, чтобы поймать исключение, а затем добавить к exception.message начало stringbuilder. Я не знаю, хотя, исключения для меня довольно новы.

public class Record 
{ 
    public string Name; 
    public string Value; 
    ... 

    private Dictionary<string, LogFormat> = new LogFormat.Table(); 

    public static string Print() 
    { 
      Stringbuilder sb = new StringBuilder(); 
      var k = ReadLog(); 

      foreach (var x in k) 
      { 
       sb.Append(x.ToString()); 
      } 

      return sb.ToString(); 
    } 

    public override string ToString() 
    { 
     if (Table[Name].NeedsValue && (Value == String.Empty || Value == null)) 
     { 
      throw new Exception(); 
     } 

     return String.Format(Table[Name].Format, Attribute, Value); 
    } 
} 

public class LogFormat 
{ 
    public string Format; 
    public bool NeedsValue = false; 

    public Dictionary<string,LogFormat> Table() 
    { 
      Dictionary<string,LogFormat> dct = new Dictionary<string,LogFormat>(); 
      dct.Add("Address", new LogFormat(){Format = "Street:{0}\nCity:{1}"}); 
      ... 
      return dct; 
    } 
} 
+0

разместить свой код ... –

+0

Okay. Дай мне минуту. – Shawn

ответ

0

Вы можете попробовать что-то вроде этого:

private string YourMethod() 
{ 
    var sb = new StringBuilder(); 

    try 
    { 
     // Do your stuff 
    } 
    catch (ASpecificException ex) 
    { 
     sb.Insert(0, ex.Message); 
    } 
    finally 
    { 
     sb.Append("YourFooter"); 
    } 

    return sb.ToString(); 
} 
2

Я не совсем уверен, что вы хотите достичь, но это звучит, как вы хотите использовать finally

http://msdn.microsoft.com/en-us/library/zwc8s4fz(VS.71).aspx

+1

избили меня, вы можете обработать свою очистку с помощью блока finally. Если вы собираетесь читать из файлов и, таким образом, можете запускать открытые файлы, вы также должны проверить инструкцию using. – pstrjds

0

Вы должны использовать поймать блок- попробовать. См. Это reference.

Вы можете выполнять задачи очистки, необходимые для блокировки и, наконец, блокировки.

0

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

+0

Должен ли я писать как обычное исключение? – Shawn

+0

вы можете написать собственное собственное исключение, это не очень сложно, но вам это действительно не нужно. В .Net есть много классов excepion, которые будут охватывать большинство ситуаций, с которыми вы сталкиваетесь. http://msdn.microsoft.com/en-us/library/ms229064.aspx – Kieran

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