我有一个生产代码抛出异常
myObj.itsProperty= 1;
System.NullReferenceException:未将对象引用设置为实例 一个对象。在 name.Extensions.Ads.Payload.ThisExtensions.ToMyLog(MyModel myModel, MyOwnModel myOwnModel)中 D:\ name \ Extensions \ Ads \ Payload \ ThisExtensions.cs:第197行
在本地代码中,强制执行此操作的唯一方法是将断点放在那里并手动将myObj更改为null。
但是根据代码流程,这应该已经初始化了......
我不完全确定发生了什么以及如何发生这种情况。有没有办法解释这一点,或者可能加强代码来防止这种情况?
public static MyModel ToMyLog(this MyModel myModel, MyOwnModel myOwnModel)
{
DateTime currentTime = DateTime.Now;
MyModel myObj =
new MyModel
{
SomeID = 1
InsertedDate = currentTime,
UpdatedDate = currentTime
};
if (myModel.somePropertiesModel.someProperty.Count >= 1)
{
myObj.itsProperty = 1; //itsProperty is a byte type
}
MyModel类
public class MyModel
{
///<summary>
/// itsProperty
///</summary>
public byte itsProperty{ get; set; }
答案 0 :(得分:2)
很可能myModel是null但不是myObj。在方法的开头添加
if(myModel?.somePropertiesModel?.someProperty==null)
throw new ArgumentNullException("myModel");
它相当于
if(myModel==null || myModel.somePropertiesModel==null || myModel.somePropertiesModel.someProperty==null)
throw new ArgumentNullException("myModel");
或者将其拆分为3个检查并使用具体信息抛出异常,该对象为空
if (myModel == null)
throw new ArgumentNullException("myModel");
if (myModel.somePropertiesModel == null)
throw new ArgumentNullException("myModel.somePropertiesModel");
if (myModel.somePropertiesModel.someProperty == null)
throw new ArgumentNullException("myModel.somePropertiesModel.someProperty");
此外,如果它内部有一些工作,它的可能性会产生此异常