c# - 构建一个可能包含 null ref 的对象

c# - Building an object that might contains null ref

我正在尝试构建具有以下属性的对象

    public class data
    {
        public string Ref{ get; set; }
        public string Number { get; set; }
        public string Type{ get; set; }
        public string? Origin{ get; set; }

    };

问题是:ref / Number / Type,我一定会在我的 XML 文件中找到这些数据,但在某些情况下 Origin 可能为空。

下面的代码是通过XML文件中的一些elt循环的,有时我们可以在子元素集合中找到origin,有时找不到origin,因为没有子元素匹配条件。

如何在构建对象的同时处理这个 null 异常?如果找不到,目标是有一个 Origin = ""。

           containerData.Add(new dataContainer()
            {
                Ref= elt.Descendants(ns + "Ref")
                      .FirstOrDefault()
                      .Value,

                Number = elt.Descendants(ns+"Number")
                         .FirstOrDefault()
                         .Value,

                Type = elt.Descendants(ns + "Type")
                         .FirstOrDefault()
                         .Value,

                Origin = subElement.Where(x => x.Element(ns + "Name").Value == "Origin")
                                .Select(x => x.Element(ns + "Value"))
                                .SingleOrDefault()
                                .Value,

            });

试图获取 Origin 可为 null 的类型,但对象在构建时仍然抛出异常。

.SingleOrDefault() 可能 return null,因此您可以使用 .SingleOrDefault()?.Value 来防止这种情况(=> 如果不为空,则仅访问 Value)。

这会给您留下一个值或 null。如果你想在这种情况下有一个空字符串(如果 null),你可以使用 .SingleOrDefault()?.Value ?? "".

供参考: