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

hrp*_*xQ4 1 c# linq

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

        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();
Run Code Online (Sandbox Code Playgroud)

使用此代码会抛出错误 ConvertAll

'IEnumerable'不包含'ConvertAll'的定义,并且没有扩展方法'ConvertAll'接受类型'IEnumerable'的第一个参数可以找到(你是否缺少using指令或汇编引用?)

我的语法似乎是错的,我想做的就是

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

我该如何解决?

Tim*_*ter 6

你可以使用Enumerable.Cast或 - 因为你想过滤 - Enumerable.OfType:

而不是

.Where(item => item != null && item is ContactEndpoint)
.ConvertAll(item => item as ContactEndpoint)
Run Code Online (Sandbox Code Playgroud)

这个(因为null值永远不会匹配任何类型,它们被隐式过滤掉OfType):

.OfType<ContactEndpoint>() 
Run Code Online (Sandbox Code Playgroud)

ConvertAll是一种方法ArrrayList<T>