簡體   English   中英

C#異常處理

[英]C# Exception Handling

我的類主要由收集字符串輸入組成,然后以某種格式輸出數據。 該類的結果基本上是一個ToString()重寫。

對於我的班級,我有一個靜態方法string Print(string path) ,它從平面文件中讀取輸入。 然后,它解析這些輸入並為平面文件中的每個記錄生成一個類的實例。 然后,對於該類的每個實例,我調用class.ToString()並將其附加到最終在Print()返回的stringbuilder。

我確保每條記錄都具有必要的值並具有適當的范圍,如果不需要,則需要引發異常。 我以前從未做過異常處理,所以我想知道我想做的事是否可能。

當引發異常情況時,我想獲取stringbuilder中的所有內容,添加結束標記清除內容,然后將異常文本放在stringbuilder之前,然后返回(異常錯誤文本+ stringbuilder.ToString()+ FooterStuff)。

修改代碼:

引發異常實際上並不是一個好主意,我可能只需要使用try {} catch {}來捕獲異常,然后將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;
     }
}

我不確定您要實現什么,但是聽起來好像您finally想使用

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

您需要使用try catch塊。 請參閱此參考

您可以在catch中執行所需的清理任務,最后執行阻止。

在班級中,如果班級出了問題,可以使用throw語句 然后在上課時,您應該使用try-catch-finally塊

你可以試試這樣的東西:

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM