C# 项目中遇到的一个问题“未将对象引用设置到对象的实例错误”

286 阅读2分钟

这个错误连续出现两次了,所以今天决定仔细研究一番,弄清楚是咋一回事。首选,自己在本地搭建了一个测试环境,测试发现一点问题都没有,不知道是不是自己的逻辑不对,还是测试方式不对。

问题是这样的就是判断条件不满足,但是我调试的时候,直接拖进去,在条件里面定义了变量,变量却报“未将对象引用设置到对象的实例错误”

image.png

先看我的测试代码

一定义类

    [Serializable]
    public partial class LGSubsRequestData
    {
        /// <summary>
        /// 运单号
        /// </summary>
        public string trackingNumber { get; set; }
        /// <summary>
        /// 物流订单号
        /// </summary>
        public string trackingOrderNo { get; set; }
    }

二定义方法

public static string TestOut(string y, out string x, out string z, out LGSubsRequestData objLGSubsRequestData, out LGSubsRequestData objLGSubsRequestData2, out LGSubsRequestData objLGSubsRequestData3)
        {
            x = string.Empty; z = string.Empty;
            x = "张总";
            z = "李大师";
            objLGSubsRequestData = null;
            objLGSubsRequestData2 = null;
            objLGSubsRequestData3 = null;

            objLGSubsRequestData = new LGSubsRequestData() { trackingNumber="sss",trackingOrderNo="777"};
            return y + "---test---" + x + "------" + z;
        }

三定义测试方法

try
            {
                string x = "a";
                if (x == "b")
                {
                    string da;
                    string ba;
                    LGSubsRequestData objLGSubsRequestData;
                    LGSubsRequestData objLGSubsRequestData2;
                    LGSubsRequestData objLGSubsRequestData3;
                    var xx = TestOut("你好", out da, out ba, out objLGSubsRequestData, out objLGSubsRequestData2, out objLGSubsRequestData3);
                    Console.WriteLine(xx);
                }

            }
            catch (Exception ex)
            {

                throw ex;
            }

四本地测试结果

没有出现上面的错误

image.png

在项目中测试,一直报上面的错误,于是设想 1把判断条件去掉,测试发现没有错误了 2满足判断条件,再进去,测试发现也没有错误。 3把变量定义判断条件之外,再拖进去,测试也没有错误。

带着这个疑问去问了 GPT, 给出的回答,好像能解释这个现象

image.png

image.png

五 结论

是定义在条件里面的变量,如果不满足条件一定不会初始化,不能被调用。在某些环境里,强制进入条件里面,变量也可能不会初始化,使用的时候会报错!

所以要想不报错,请把变量定义判断条件外面,并给初始化值!