繁体   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