This question already has answers here:
What is a NullReferenceException, and how do I fix it?
                                
                                    (29个答案)
                                
                        
                                3年前关闭。
            
                    
我有一个生产代码抛出异常

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; }

最佳答案

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个检查并使用具体信息引发异常,什么对象为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");


另外,如果它的内部执行某些工作,则其属性的getter可能会产生此异常。

关于c# - 对象已初始化,但仍为null ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39784401/

10-13 01:59