对象初始化,但仍然为空
本文关键字:初始化 对象 | 更新日期: 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在