相关疑难解决方法(0)

使用异常消息属性检查特定错误是不好的做法吗?

有时,异常类型足够独特,可以指示确切的问题,例如ArgumentOutOfRangeException.Othertimes,例外情况更为笼统,可能会因为多种原因而被抛出.在这种情况下,似乎在异常消息属性中找到了唯一的附加信息.

在我目前的情况下,我收到一个抛出错误消息的CommunicationException:

已超出传入邮件的最大邮件大小限额(65536)

由于可能通过CommunicationException抛出多个不同的错误,使用message属性确定原因是不好的做法,如下所示:

catch (CommunicationException ex)
{
    if (Regex.IsMatch(ex.Message, "The maximum message size quota for incoming messages .* has been exceeded"))
    {
        // handle thrown exception
    }
    throw;
}
Run Code Online (Sandbox Code Playgroud)

这些消息在所有系统上都是恒定可靠的吗?是否还有其他考虑因素,例如本地化?

结论:

我使用'CommunicationException'的方案是一个糟糕的例子,因为我后来意识到InnerException属性中存在QuotaExceededException.由于回复,我知道要查找异常中存在的任何数据以指出确切原因.在这种情况下,它是InnerException属性.

关于是否应该使用消息属性来确定原因的问题,除非没有替代方案,否则应该避免应该避免的普遍共识.由于本地化,消息属性值可能不会在不同系统上保持不变.

c# exception-handling exception

8
推荐指数
1
解决办法
1085
查看次数

如何处理异常消息的翻译?

我真的不知道在多语言应用程序中处理异常的最佳方法.

我应该在哪里处理错误消息的翻译(Exception.Message)?

如果我抛出异常,我应该在ctor中翻译消息吗?

throw new MyException("Error message", Resource.MyException_TranslatedMessage);
Run Code Online (Sandbox Code Playgroud)

或者我抛出异常并使用自制帮助程序,它将使用View逻辑中的异常类型找到错误消息?

try
{
    //...
}
catch(Exception ex)
{
    myLabel.Text = new ExceptionTranslator(ex).Translate();
}
Run Code Online (Sandbox Code Playgroud)

或者,Microsoft是否提供了一个工具或机制来执行此操作?

总之一句:处理异常消息翻译的好方法是什么?

c# exception

8
推荐指数
1
解决办法
6231
查看次数

Silverlight ValidatesOnException默认消息本地化

在我的silverlight 4 MVVM应用程序中,我可以在运行时切换语言:

public void SetLanguage(string language)
{
    var culture = new CultureInfo(language);
    Thread.CurrentThread.CurrentUICulture = culture;
    Thread.CurrentThread.CurrentCulture = culture;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

对于输入,我只是在转换问题的情况下添加了"ValidatesOnException = true"并且它完成了工作.但默认的异常消息是在我的操作系统文化中,而不是在手动选择的消息中.

在这个关于异常消息本地化的线程中,想法是改变CurrentCulture和CurrentUICulture,我做了.所以我有点卡住了.

我能做什么 ?

谢谢 :)

编辑:我试图在convertback方法中使用带有自定义异常的自定义转换器,以验证用户的输入.问题,转换方法中的异常不会被validatesOnException捕获,它会破坏应用程序.

编辑2:澄清 - >如果我有一个十进制属性绑定到一个文本框,我在这个文本框中输入"blabla",我想看到有一个问题,我希望该消息在运行时区域设置和不是操作系统区域设置.我不能在我的属性设置器中引发异常,因为我从未到达那里,默认转换器在此之前引发它自己的异常.

我希望它很清楚.如果我可以帮助你帮助我,请不要犹豫:)

silverlight localization silverlight-4.0 c#-4.0

7
推荐指数
1
解决办法
753
查看次数

如何将.net错误信息语言改为英语

我使用的是VS2012,.net 4.5和Win7 Professional.Win7是土耳其语,现在我收到土耳其语的错误消息!在Win7 Professional中,无法安装/卸载语言包.是否可以在不重新安装VS或.net包的情况下更改错误消息语言?

.net windows-7-x64 visual-studio-2012

6
推荐指数
1
解决办法
4935
查看次数

如何用英语获取Win32Exception?

Exception无论我的程序运行的机器是什么语言,我都试图用英语获取所有消息.

我已经设法使用以下帖子中的答案获得几乎所有的英语异常消息: 英语异常消息? 和我发现的其他一些解决方案(比如使用反射来改变默认值CultureInfo).我有特定的问题SocketException,无论我在做什么,我都会使用默认机器的语言.

我已经创建了一个测试程序来显示问题:这个测试程序将以默认语言打印Exceptions:

using System;
using System.Text;
using System.Threading;
using System.IO;
using System.Net.Sockets;
using System.Reflection;
using System.Globalization;

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //I'm not listening on the following port:
                TcpClient s = new TcpClient("localhost", 2121);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Socket exception: " + ex.Message);
            }
            try
            {
                //the following file doesn't exists:
                File.ReadAllText("filenotexist.txt");
            }
            catch (Exception ex)
            {
                Console.WriteLine("File exception: " + …
Run Code Online (Sandbox Code Playgroud)

.net c# exception

5
推荐指数
1
解决办法
920
查看次数

当我依赖我的代码中的异常消息时,我可以确定它是英文的吗?

我有以下代码:

if (smtpException != null)
{
    if (smtpException.InnerException.Message.Contains("net_io_connectionclosed"))
    {
        sendingFailedException = new EmailSendingFailedException(EmailsLocalization.EmailSendFailedWrongPortNumber, e);
    }

    if (smtpException.StatusCode == SmtpStatusCode.MustIssueStartTlsFirst || 
        smtpException.Message.Contains("AUTH"))
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

当我依赖我的代码中的异常消息时,我可以确定它是英文的吗?

c#

2
推荐指数
1
解决办法
133
查看次数