ฉันต้องการป้องกันการประมวลผลเพิ่มเติมบนวัตถุหากเป็นโมฆะ
ในรหัสต่อไปนี้ฉันตรวจสอบว่าวัตถุเป็นโมฆะโดยอย่างใดอย่างหนึ่ง:
if (!data.Equals(null))
และ
if (data != null)
แต่ผมได้รับที่NullReferenceException
dataList.Add(data)
หากวัตถุนั้นเป็นโมฆะมันไม่ควรที่จะใส่คำสั่งif
-state!
ดังนั้นฉันถามว่านี่เป็นวิธีที่เหมาะสมในการตรวจสอบว่าวัตถุเป็นโมฆะ:
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;
}
หากนี่เป็นวิธีที่เหมาะสมในการตรวจสอบว่าวัตถุนั้นเป็นโมฆะฉันกำลังทำอะไรผิด (ฉันจะป้องกันการประมวลผลเพิ่มเติมบนวัตถุเพื่อหลีกเลี่ยง NullReferenceException) ได้อย่างไร
!= null
ในการตรวจสอบโมฆะของคุณเสมอ .Equals
จะโยนข้อยกเว้นเสมอหากวัตถุนั้นเป็นโมฆะ
throw e;
ไม่ดีขึ้นมาก throw;
ในทางกลับกัน ...
e.ToString()
จะสร้างสตริงที่รวมถึงข้อความแสดงข้อผิดพลาดเท่านั้น แต่ยังรวมถึงสตริงทั้งหมดInnerExceptions
และการติดตามสแต็ก นั่นเป็นข้อความข้อยกเว้นที่อ้วนมาก ๆ หากคุณ (ถูกต้อง) throw;
ต้องการที่จะรักษาข้อมูลนี้และเก็บที่มันอยู่ให้ใช้เพียง
throw e;
กับthrow new Exception(e.ToString());