根据对象/类型成员查找字典值

时间:2014-10-30 16:02:31

标签: c#

我的字典定义如下,

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"
});

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

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

我试过这个并收到错误。

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

4 个答案:

答案 0 :(得分:1)

问题是您要添加到词典的第一个项目是null,因此在执行谓词t.Value.ID.Equals("1")时,该值t.Valuenull并且您获得的错误是NullReferenceException

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

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

答案 1 :(得分:1)

你只需要首先清除空值:

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

答案 2 :(得分: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();

答案 3 :(得分:1)

我已经看到了很好的答案。 只想在C#6.0中添加,您将能够使用Null-Conditional运算符: c# 6.0。 并且你的代码可以很好地添加小修改?其中null出现在值上。

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