Tôi muốn ngăn chặn xử lý thêm trên một đối tượng nếu nó là null.
Trong đoạn mã sau tôi kiểm tra xem đối tượng có null không:
if (!data.Equals(null))
và
if (data != null)
Tuy nhiên, tôi nhận được NullReferenceException
tại dataList.Add(data)
. Nếu đối tượng là null, nó thậm chí không bao giờ được đưa vào if
-statement!
Vì vậy, tôi hỏi liệu đây có phải là cách kiểm tra thích hợp nếu một đối tượng là null:
public List<Object> dataList;
public bool AddData(ref Object data)
bool success = false;
try
{
// I've also used "if (data != null)" which hasn't worked either
if (!data.Equals(null))
{
//NullReferenceException occurs here ...
dataList.Add(data);
success = doOtherStuff(data);
}
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
return success;
}
Nếu đây là cách kiểm tra thích hợp nếu đối tượng là null, tôi đang làm gì sai (làm cách nào tôi có thể ngăn chặn việc xử lý thêm trên đối tượng để tránh NullReferenceException)?
!= null
trong kiểm tra null của bạn. .Equals
sẽ luôn ném một ngoại lệ nếu đối tượng là null.
throw e;
không tốt hơn nhiều. throw;
, mặt khác ...
e.ToString()
sẽ tạo ra một chuỗi bao gồm không chỉ thông báo lỗi, mà cả chuỗi của tất cả InnerExceptions
và dấu vết ngăn xếp. Vì vậy, đó là một thông điệp ngoại lệ rất nặng. Nếu bạn (đúng!) Muốn lưu giữ thông tin này và giữ nơi nó thuộc về, hãy sử dụng một cách đơn giản throw;
.
throw e;
so vớithrow new Exception(e.ToString());