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应用程序?显示错误消息的方法非常多