0

使用 Telerik Radtextbox 时,避免抛出未设置为对象实例的对象引用的更好代码是什么?下面的两个代码是一样的吗?我可以设置一个默认值来避免抛出空引用吗?

protected void btnAddSAles_click(object sender, EventArgs e)        
{  
   string orderName = Ordername.Text;
}

或者

protected void btnAddSAles_click(object sender, EventArgs e)        
{    
   TextBox b = item.FindControl("Ordername") as TextBox;            
   string box1 = b.text;            
}
4

2 回答 2

0

假设 FindControl正在nullas你想要制作的演员阵容中回归。我假设(再次)它没有找到名为 的控件Ordername,因此您试图访问对象Text上的null属性,这会导致NullReferenceException.

你应该做的是:

  1. 检查为什么没有命名控件Ordername,因为我假设应该有一个
  2. 如果调用 的控件Button.Click 可能并不总是一个TextBox对象,请添加一个空值检查:

    protected void btnAddSAles_click(object sender, EventArgs e)        
    {    
       TextBox b = item.FindControl("Ordername") as TextBox;      
       if (b != null)
       {      
          string box1 = b.text;
       }           
    }
    
于 2014-07-26T12:19:45.957 回答
0

这两个代码示例并不相同。

第一个示例不会抛出该异常,除非您Ordername = null在代码中明确设置,我怀疑您是否这样做了。

第二个样本将抛出,因为您试图将 aRadTextBox转换为 a TextBox(我假设,因为您在询问RadTextBox),结果bnull

如果要避免出现空引用异常的可能性,则必须null在访问控件上的属性之前进行检查:

protected void btnAddSAles_click(object sender, EventArgs e)        
{    
   TextBox b = item.FindControl("Ordername") as TextBox;  

   if (b != null)
   {
       // do something with b.Text;
   }
}

这里真正的问题是您正在转换为错误的类型。RadTextBox不是从本机控件派生的TextBox。您必须转换为RadTextBox.

protected void btnAddSAles_click(object sender, EventArgs e)        
{    
   RadTextBox b = item.FindControl("Ordername") as RadTextBox;  

   if (b != null)
   {
       // do something with b.Text;
   }
}
于 2014-07-26T12:21:05.493 回答