基于对象/类型成员查找字典值

本文关键字:成员 类型 查找 字典 于对象 对象 | 更新日期: 2023-09-27 18:28:39

我有如下定义的字典,

Dictionary<string, SampleObject> test = new Dictionary<string, SampleObject>();
test.Add("A", null);
test.Add("B", new SampleObject()
{
    ID = "1",
    Value1 = "BBBBB1",
    Value2 = "BBBBB2"
});
test.Add("C", new SampleObject()
{
    ID = "1",
    Value1 = "CDCDCD1",
    Value2 = "CDCDCD2"
});
test.Add("D", new SampleObject()
{
    ID = "2",
    Value1 = "XXFFA",
    Value2 = "XXFFB"
});

如何获取对象/类型为null的列表/计数?

如何获取列表/计数其中的对象/类型属性(ID=1)?

我试过了,但出现了错误。

var ones = test.Where(t => t.Value.ID.Equals("1"));

基于对象/类型成员查找字典值

您只需要首先清除null:

var nulls = test.Count(c => c.Value == null);
var ones = test.Count(c => c.Value != null && c.Value.ID == "1");

问题是,添加到字典中的第一个项是null,因此在执行谓词t.Value.ID.Equals("1")时,对于该值,t.Valuenull,而得到的错误是NullReferenceException

代码基本上是正确的,您可以避免将null值添加到字典中,或者在谓词中测试它们

var ones = test.Where(t => t.Value != null && t.Value.ID.Equals("1"));

您可以通过以下方式获取null对象的计数:

var ones = test.Where(t => t.Value == null).Count();

对于ID等于1:的对象

var ones = test.Where(t => t.Value != null && t.Value.ID == 1).Count();

我已经看到了很好的答案。只是想补充一下,从C#6.0中,您将能够使用Null条件运算符:c#6.0。添加小的修改后,您的代码就可以了吗?其中null出现在值上。

var ones = test.Where(t => t.Value?.ID.Equals("1"));