对象引用未设置为具有字符串数组的消息的对象实例
本文关键字:数组 消息 对象 实例 字符串 设置 对象引用 | 更新日期: 2023-09-27 18:35:13
我有以下代码:
protected void btnSave_Click(object sender, EventArgs e)
{
StarBusModel.BookingDetail1 objBooking = new StarBusModel.BookingDetail1();
objBooking.TourID = tourID;
objBooking.Name = txtName.Text;
objBooking.Phone = txtPhone.Text;
objBooking.Amount = Convert.ToDecimal(Request.Form[txtAmount.ClientID]);
string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','});
for (int i = 0; i < seats.Length; i++)
objBooking.SeatDetails.Add(new StarBusModel.SeatDetail1() {SeatID = Convert.ToInt32(seats[i])});
objEntities.BookingDetail1.AddObject(objBooking);
objEntities.SaveChanges();
BindSeats();
}
我收到错误
System.NullReferenceException: Object reference not set to an instance of an object.
在以下代码中:
string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','});
请告知我错在哪里。我搜索了各种答案,但无法确定我错在哪里。
Request.Form[txtSeatNo.ClientID]
显然是空的。通常,如果未定义给定的键,则NameValueCollection
(如Request.Form
)将返回空字符串。
您应该进行检查:
string seatString = Request.Form[txtSeatNo.ClientID];
string [] seats = String.IsNullOrEmpty(seatString) ? new char[]{} :
seatString.Split(new char[] {','});
NullReferenceException 是一个非常令人头疼的例外。即使您可以通过查看堆栈跟踪来知道异常发生的行。但它也可能包括 1 种以上的可能性。
你的案例就是一个例子。
string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','});
实际上,在这一行中,有2个地方可能导致空异常。它们是:
- txtSeatNo.ClientID
- Request.Form[txtSeatNo.ClientID]
通常第二个是最有可能的。
因此,最好在多行中编写代码并在使用前检查值。我认为雅各布·亚伯拉罕斯(Jacob Abrahams)举了一个很好的例子。