C# 条件TryGetValue抛出“对象引用未设置为对象的实例”。异常

C# 条件TryGetValue抛出“对象引用未设置为对象的实例”。异常,c#,asp.net-mvc-4,exception,C#,Asp.net Mvc 4,Exception,我在MVC.NET应用程序中有一个web方法,它接受来自AJAX调用的json数据字符串,并在数据库中进行更新 数据是一个对象数组,可以是两种包类型之一。我检查它是哪种包类型,然后将字符串反序列化到该类。所以函数看起来像这样: public JsonResult SaveData (string jsonIn) { string rtnStr = ""; bool hasChanges = false; using (var db

我在MVC.NET应用程序中有一个web方法,它接受来自AJAX调用的json数据字符串,并在数据库中进行更新

数据是一个对象数组,可以是两种包类型之一。我检查它是哪种包类型,然后将字符串反序列化到该类。所以函数看起来像这样:

    public JsonResult SaveData (string jsonIn)
    {
        string rtnStr = "";
        bool hasChanges = false;
        using (var db = new MyDBContext())
        {

            JArray packages = JArray.Parse(jsonIn);
            foreach (JObject package in packages.Children<JObject>())
            {
                string packageType = "Unknown";
                if (package != null & package.TryGetValue("DataType", out JToken value))
                {
                    packageType = value.ToString();
                }
                if (packageType == "PackageTypeA")
                {
                    PackageTypeA pkgTypeA = JsonConvert.DeserializeObject<PackageTypeA>(package.ToString());
                    //do some things
                } 
                else if (packageType == "PackageTypeB") {
                    PackageTypeB pkgTypeB = JsonConvert.DeserializeObject<PackageTypeB>(package.ToString());
                    //do something else
                }
            }
        }
     }
作为一个布尔方法,不应该package.TryGetValueDataType,out JToken value等于false,这样packageType=value.ToString;如果数据类型为null,则不执行此操作?

程序包!=空文件包(&P)。。。。这是你的问题。 包为null,但您尝试访问它的TryGetValue方法

相反,请使用&&:

或者更好——好吧,更短,至少:

if (package?.TryGetValue("DataType", out JToken value) ?? false)

我认为如果包!=null&package.TryGetValueDataType,out JToken值,而不是下一行(如果是这种情况),但我认为&而不是&&也是一个问题。ThanksIt将从此行中抛出…异常的stacktrace表明情况并非如此
if (package != null && package.TryGetValue("DataType", out JToken value))
if (package?.TryGetValue("DataType", out JToken value) ?? false)