0

我正在使用FileHelper来解析 CSV 文件。解析文件时遇到的错误消息会显示给最终用户。最终用户可能无法理解技术错误消息。没有太多的职员知道 anInt32是什么或Class: UploadFooDto.

我想自定义错误消息,使它们更加用户友好。就像是:

  • 第 1 行。第 2 列。输入了字符串 (a) 而不是数字
  • 第 2 行。第 3 列。“13-14-15”不是有效日期

我在 API 中找不到任何可以自定义错误消息的内容。到目前为止,我拥有的最多的是一些清理错误的扩展方法:

public static class FileHelperExceptionExtensions
{
    public static string BuildMessage(this ErrorInfo error)
    {
        if (error.ExceptionInfo is ConvertException)
        {
            return ((ConvertException)error.ExceptionInfo).BuildMessage();
        }

        if (error.ExceptionInfo is BadUsageException)
        {
            var message = error.ExceptionInfo.Message;
            var readTo = message.IndexOf("Class:");
            return message.Substring(0, readTo);
        }

        return string.Format("Line: {0}. An unspecific error occured.", error.LineNumber);
    }

    public static string BuildMessage(this ConvertException exception)
    {
        return string.Format("Line: {0}. Column: {1}. Field: {2}. Cannot convert '{3}' to type: '{4}'", exception.LineNumber, exception.ColumnNumber, exception.FieldName, exception.FieldStringValue, exception.FieldType.Name);
    }
}

但是这些扩展仍然有很多不足之处。是否可以自定义错误消息?

4

1 回答 1

0

很难改进你的扩展方法而不是它比它的价值更麻烦。

您不能对默认转换器进行子类化(例如,FileHelpers.ConvertHelpers.Int32Converter因为它们是internaland sealed)。您可以为每种类型创建自己的自定义转换器(并将其基于来自 FileHelpers 的相应源代码,例如Int32Converter)。然后你可以提出一个替代方案ConvertException(也sealed因此你不能子类化),它会以不同的方式格式化消息。

于 2012-11-08T13:52:29.967 回答