【发布时间】:2017-03-01 05:29:05
【问题描述】:
我创建了一个验证表单的方法。此方法使用另一个类的扩展。相同的代码可用于验证其他表单,但它会阻止我验证日志记录表单。代码几乎相同,但不适用于此实例。
这是我的验证方法:
public bool ValidateForm()
{
bool isValid = true;
errProv.ClearErrors(txtUsername, txtPassword);
if(String.IsNullOrEmpty(txtUsername.Text)) { errProv.SetError(txtUsername, LangRes.FieldIsRequired); isValid = false; }
if(String.IsNullOrEmpty(txtPassword.Text)) { errProv.SetError(txtPassword, LangRes.FieldIsRequired); isValid = false; }
return isValid;
}
这是我提供的错误类:
public static class ErrorProviderExtension
{
/// <summary>
/// To Clear all errors associated with controls
/// </summary>
/// <param name="errProv"></param>
/// <param name="controls"></param>
public static void ClearErrors(this ErrorProvider errProv, params Control[] controls)
{
if (controls!=null & controls.Length>0)
{
foreach(Control c in controls)
{
errProv.SetError(c, String.Empty);
}
}
}
}
问题是对象引用未设置为对象的实例,但如果另一个没有此问题的情况下工作,我不明白它为什么我不明白为什么这个给我这个异常。有人可以帮忙吗?
【问题讨论】:
-
如果您准确指出错误发生的何处,这会有所帮助吗?你试过调试这个吗?什么变量为 null 并抛出异常?
-
@rory.ap
errProv.SetError(c, String.Empty);errProv.ClearErrors(txtUsername, txtPassword);这一行 -
它真的是工作代码吗?我可以看到如果 (controls!=null & controls.Length>0) 只有一个 & 不起作用,你应该有 &&。
-
它绝对有效,因为我尝试了其他方法并且代码完全相同。
-
C# 语言通常提供在调用站点引发 NullReferenceException 的保证。但这在扩展方法的特定情况下不起作用,您会在方法本身中获得异常。您需要练习调试,但这并不难帮助您看到 errProv 变量为空。只需将鼠标悬停在名称上即可查看它们包含的内容。变量名称与扩展方法参数名称完全匹配是潜在错误的另一个提示。通常的名称类似于“this.errorProvider1”。
标签: c# validation error-handling runtime-error