将对象列表转换为类型数组并删除空值

时间:2018-08-30 11:34:23

标签: c# linq

我想获取一些数据并将其转换为对象列表。我要从此列表中选择非null且具有特定类型的项目。之后,我想将这些对象变量转换为正确的类型,并将此列表作为数组返回。

        ContactEndpoint[] points = (GetContactInformation(contact, ContactInformationType.ContactEndpoints) as List<object>)
            .Select(item => item)
            .Where(item => item != null && item is ContactEndpoint)
            .ConvertAll(item => item as ContactEndpoint)
            .ToArray();

使用此代码会在ConvertAll处引发错误

  

“ IEnumerable”不包含“ ConvertAll”的定义   并且没有扩展方法'ConvertAll'接受第一个参数   可以找到“ IEnumerable”类型(您是否缺少   指令还是程序集引用?)

我的语法似乎是错误的,我只想做

  • 获取此数据(作为对象列表返回)
  • 选择所有非null值和ContactEndpoint类型的对象
  • 将其作为数组返回

我该如何解决?

3 个答案:

答案 0 :(得分:6)

您可以使用ContactEndpoint[] points = (GetContactInformation(contact, ContactInformationType.ContactEndpoints) as List<object>) .Where(item => item is ContactEndpoint) .Cast<ContactEndpoint>() .ToArray(); 或-因为要过滤-Enumerable.Cast

所以不是

Enumerable.OfType

此(由于.Where(item => item != null && item is ContactEndpoint) .ConvertAll(item => item as ContactEndpoint) 的值永远不会与null隐式滤除的任何类型的匹配):

OfType

.OfType<ContactEndpoint>() ConvertAllArrray

的方法

答案 1 :(得分:3)

尝试一下:

#!/usr/bin/perl
use warnings;
use strict;

{   package MyLib;

    my %hash = (
        Addr => {
            aa => 0x11223344,
            bb => 0x55667788,
            cc => 0xaabbccdd,
        },
    );
    sub get_hash { %hash }

}


my %hash = MyLib::get_hash();
print "========================\n";
print "1: $hash{Addr}{'aa'}\n";
print "2: $hash{Addr}{'bb'}\n";
print "3: $hash{Addr}{'cc'}\n";

答案 2 :(得分:2)

    ContactEndpoint[] points = GetContactInformation(contact, 
                    ContactInformationType.ContactEndpoints) 
        .Where(item => item != null)
        .OfType<ContactEndpoint>()
        .ToArray();

您不需要as List<object>.Select(item => item)