0

我需要为我的应用程序抛出的异常添加本地化,​​因为很多都是 ApplicationExceptions 并处理并记录到错误报告中。理想情况下,我想创建一个新的异常,继承自 ApplicationException,我可以将资源键和参数传递给它,以便可以从资源信息中构建异常消息。不幸的是(我认为)在异常中设置消息的唯一方法是在 New()...

我想要类似的东西:

public class LocalizedException
    Inherits ApplicationException  

public Sub New(ResourceKey as string, arg0 as Object)
    MyBase.New()
    ' get the localized text'  
    Dim ResMan as New Global.System.Resources.ResourceManager("AppName.ExceptionResources", _
    System.Reflection.Assembly.GetExecutingAssembly)
    Dim LocalText as string = ResMan.GetString(ResourceKey)
    Dim ErrorText as String = ""
    Try
        Dim ErrorText = String.Format(LocalText, arg0)
    Catch
        ErrorText = LocalText + arg0.ToString() ' in case String.Format fails'
    End Try
    ' cannot now set the exception message!'
End Sub
End Class

但是我只能将 MyBase.New() 作为第一行 Message 是 ReadOnly

有人对如何将本地化字符串放入异常处理程序有任何建议吗?我将在一些不同的异常中需要它,尽管可以采用获取本地化字符串并创建异常的异常创建函数的方式,尽管堆栈信息将是错误的。我也不希望在 Throw 之前的主体内容过多,因为它显然开始影响流程的可读性。

4

2 回答 2

2

这是我所做的一个示例。EmillException 继承自 ApplicationException。


namespace eMill.Model.Exceptions
{
    public sealed class AccountNotFoundException : EmillException
    {
        private readonly string _accountName;

        public AccountNotFoundException(string accountName)
        {
            _accountName = accountName;
        }

        public override string Message
        {
            get { return string.Format(Resource.GetString("ErrAccountNotFoundFmt"), _accountName); }
        }
    }
}
于 2008-11-13T20:17:05.343 回答
0

看看这个:

http://visualstudiomagazine.com/features/article.aspx?editorialsid=2562

我不必处理本地化问题,但这很有意义。

于 2008-12-01T14:26:25.453 回答