对象初始化,但仍然为空

本文关键字:初始化 对象 | 更新日期: 2023-09-27 18:09:31

我有一个产品代码在

抛出异常
myObj.itsProperty= 1; 

系统。NullReferenceException:对象引用没有设置为实例一个物体的。在name.Extensions.Ads.Payload.ThisExtensions。ToMyLog (MyModel MyModel,MyOwnModel MyOwnModel) inD: ' '扩展名称' '载荷' 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; }

对象初始化,但仍然为空

最有可能myModel是空的,但不是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个检查并抛出异常,并提供对象为null的具体信息

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");

也有可能itsProperty的getter在

内部做一些工作时产生这个异常