C# 对象引用的自定义消息未设置为对象的实例

C# 对象引用的自定义消息未设置为对象的实例,c#,vb.net,winforms,exception-handling,C#,Vb.net,Winforms,Exception Handling,你好 我们有一个巨大的windows应用程序,但异常处理很差。应用程序从很多地方抛出对象引用错误,系统错误消息在使用消息框时显示给用户 我正在寻找一个简单的解决方案,可以用来取代这个消息,为整个应用程序的用户友好的东西 谢谢…当您捕获异常并显示消息框时,只需在消息框中写入友好消息即可。我认为显示异常消息不是一个好主意——它可能泄露恶意用户可能用来攻击应用程序的应用程序结构信息 **附加的** 不管怎样,这都是一个很大的变化。您可以在许多地方覆盖异常,也可以在许多地方覆盖错误消息的显示。我建议您将

你好
我们有一个巨大的windows应用程序,但异常处理很差。应用程序从很多地方抛出对象引用错误,系统错误消息在使用消息框时显示给用户

我正在寻找一个简单的解决方案,可以用来取代这个消息,为整个应用程序的用户友好的东西


谢谢…

当您捕获异常并显示消息框时,只需在消息框中写入友好消息即可。我认为显示异常消息不是一个好主意——它可能泄露恶意用户可能用来攻击应用程序的应用程序结构信息

**附加的**


不管怎样,这都是一个很大的变化。您可以在许多地方覆盖异常,也可以在许多地方覆盖错误消息的显示。我建议您将错误消息的显示合并到一个地方,这样当您需要新的错误消息时,您就有一个地方可以去,因此在将来,如果您需要更改它,就有一个地方可以更改。

当您捕获异常并显示消息框时,您只需要在消息框中写一条友好的消息。我认为显示异常消息不是一个好主意——它可能泄露恶意用户可能用来攻击应用程序的应用程序结构信息

**附加的**


不管怎样,这都是一个很大的变化。您可以在许多地方覆盖异常,也可以在许多地方覆盖错误消息的显示。我建议您将错误消息的显示合并到一个位置,这样当您需要新的错误消息时,您就有一个位置可以去,因此在将来,如果需要更改,可以在一个位置进行更改。

您需要捕获遗留应用程序引发的异常,并将该异常记录在某个日志文件中,并根据发生的异常显示适当的用户友好消息


例如,不显示FileNotFound异常消息和stacktrace,您可以只显示“应用程序无法找到文件xyz”。

您需要捕获旧应用程序引发的异常,并将该异常记录在某个日志文件中,并根据发生的异常显示适当的用户友好消息


例如,不显示FileNotFound异常消息和stacktrace,您可以只显示“应用程序无法找到文件xyz”。

如果是Asp.Net应用程序,请在global.asax中使用应用程序错误事件

 Application_Error

 {
   HttpContext context = HttpContext.Current;

   Exception ex = context.Server.GetLastError();
  //process your exception

    if ( context.IsCustomErrorEnabled )
   {
      context.Server.ClearError();
      context.Server.Transfer( "~/error.aspx" );
   }
 }

如果是Asp.Net应用程序,请在global.asax中使用应用程序_错误事件

 Application_Error

 {
   HttpContext context = HttpContext.Current;

   Exception ex = context.Server.GetLastError();
  //process your exception

    if ( context.IsCustomErrorEnabled )
   {
      context.Server.ClearError();
      context.Server.Transfer( "~/error.aspx" );
   }
 }

在WinForms应用程序中,您可以使用类似所述的技术来显示用户友好的错误消息


这就是说,由于空引用异常的唯一原因是开发人员错误,因此存在一种强烈的代码气味,即应用程序存在许多总体问题。我建议您至少在将要放置的异常处理程序中放置一个记录器,这样错误就不会被忽略。

在WinForms应用程序中,您可以使用类似所述的技术来显示用户友好的错误消息


这就是说,由于空引用异常的唯一原因是开发人员错误,因此存在一种强烈的代码气味,即应用程序存在许多总体问题。我建议至少在您将要放置的异常处理程序中放置一个记录器,这样错误就不会被忽略。

@Anz:在代码中的每个地方使用异常处理是不好的,所以请始终记住这一点,并且您必须知道所有不同类型的异常的含义。 在您的场景中,您将获得“对象引用异常”,而此异常的主要原因是您在访问变量时没有检查null,如

例1:-

数据集ds

 If(ds!=null)
 {
   int val = ds.Table.count();
 } 
现在,如果我以ds.Table.count()的形式访问它,它将给出异常,所以这里我们应该使用

数据集ds

 If(ds!=null)
 {
   int val = ds.Table.count();
 } 
例2:-

     string strVariable=txtInput.Text;

     int number = Convert.Int32(strVariable); // here if txtInput.Text is empty them     it will through exception so here we can use
如果(!String.IsNullOrEmpty(strVariable)) int number=Convert.Int32(标准变量)

如果您想在异常句柄中显示自定义消息,则可以创建自己的异常类,该类将覆盖异常类,然后您可以抛出并捕获如下内容:

public class MyException : Exception
{
    public string customMessage;
    public MyException(string sourceName)
    {
        customMessage = sourceName + " can not be null";
    }
    public MyException()
    {
        customMessage="ObjectReferenceException";
    }        
}
在您使用的代码中,请尝试使用catch

        try
        {

            throw new MyException("check");
        }
        catch (MyException ex)
        {
            MessageBox.Show(ex.customMessage);
        }

@澳新银行:在代码中的每一个地方使用异常处理是不好的,所以请始终记住这一点,并且您必须知道所有不同类型的异常的含义。 在您的场景中,您将获得“对象引用异常”,而此异常的主要原因是您在访问变量时没有检查null,如

例1:-

数据集ds

 If(ds!=null)
 {
   int val = ds.Table.count();
 } 
现在,如果我以ds.Table.count()的形式访问它,它将给出异常,所以这里我们应该使用

数据集ds

 If(ds!=null)
 {
   int val = ds.Table.count();
 } 
例2:-

     string strVariable=txtInput.Text;

     int number = Convert.Int32(strVariable); // here if txtInput.Text is empty them     it will through exception so here we can use
如果(!String.IsNullOrEmpty(strVariable)) int number=Convert.Int32(标准变量)

如果您想在异常句柄中显示自定义消息,则可以创建自己的异常类,该类将覆盖异常类,然后您可以抛出并捕获如下内容:

public class MyException : Exception
{
    public string customMessage;
    public MyException(string sourceName)
    {
        customMessage = sourceName + " can not be null";
    }
    public MyException()
    {
        customMessage="ObjectReferenceException";
    }        
}
在您使用的代码中,请尝试使用catch

        try
        {

            throw new MyException("check");
        }
        catch (MyException ex)
        {
            MessageBox.Show(ex.customMessage);
        }

你有源代码访问权限吗?或者仅仅是二进制文件?yap源代码在那里。。但是在警报显示时更改代码将是一个很大的变化,因为在很多地方都是这样。我正在寻找一种方法来覆盖异常类或其他内容,并发送一条友好的消息,而不是Obejct引用错误消息..它是windows应用程序还是web应用程序?您有源代码访问权限吗?或者仅仅是二进制文件?yap源代码在那里。。但是在警报显示时更改代码将是一个很大的变化,因为在很多地方都是这样。我正在寻找一种方法来覆盖异常类或其他东西,并发送一条友好的消息,而不是Obejct引用错误消息..它是windows应用程序还是web应用程序?显示错误消息的方法非常多