使用问号运算符 c# 在多个级别检查 null/empty

Check null/empty at multiple levels using question mark operator c#

考虑一下我有以下 class

class Dummy
{
    List<DummyObj> list;
}

class DummyObj
{
    string A;
    int B;
}

我有一个 Helper Class,它接收一个 Dummy 类型的对象和 returns 列表索引 0 处的 A 值。我正在尝试处理所有 null 和空的情况(当传入 dummy 为 null 时,当 dummy 不为 null 时,但列表未初始化,当列表已初始化但它为空时。

public string GetA(Dummy dummy)
{
    return dummy?.list?[0]?.A;
}

当 dummy 为 null 或 list 为 null 时,它工作正常。但是当列表为空时,我收到以下错误 - System.ArgumentOutOfRangeException: 'Index was out of range.必须为非负数且小于集合的大小。 (参数'index')'

我肯定在处理空列表时犯了一些错误。有人可以指出并帮我修正上面的说法吗?

编辑:为了澄清,我想 return 一个 null 以防上述任何条件成立。

使用以下内容:

return dummy?.list?.FirstOrDefault()?.A;

您应该避免在列表上使用索引,因为列表不是确定性的。如果您必须知道某个项目在集合中的位置,请使用数组。