'类型'是一个变量,但与LINQ的类型错误一样使用

时间:2017-05-15 02:25:43

标签: c# linq

我有这样的方法:

private static void OfElementType2(Type elementType, Type baseType)
{
    var baseCollection = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument)
        .OfClass(baseType);

    var derivedCollection = (from e in baseCollection.ToElements()
        where e is elementType select e as elementType);
}

我正在接受

  

'类型'是一个变量但是像Type

一样使用
<{1}}的异常和where e is elementType的异常。有人可以向我解释这个概念吗?

执行select e as elementType并不能达到我的想象。我错过了什么?

修改

为遗失的背景道歉。我遇到的问题是有一个基于类的选择器,我可以使用typeof(elementType)但它有某些派生类限制。所以基本上如果我有一个班级FilteredElementColector().OfClass(),它就不会对它起作用,因为它来自Room类。在这种情况下,我需要使用SpatialElement类并检查它是否为SpatialElement类型,以便我只能隔离Room个对象(还有其他类继承自Room })。我必须解决这些例外中的一小部分,这就是为什么我有这个问题的原因。我能够像这样解决它:

SpatialElement

2 个答案:

答案 0 :(得分:1)

您必须针对具体类型进行测试,而不是变量(即使该变量的类型为Type),这将不适用于此形式。但是,如果您知道类型,例如:RoomSpatialEvent,您可以对此进行测试。

见样本:

var derivedRoomCollection = baseCollection.ToElements().Where(t => t is Room)
var derivedSpatialEventCollection = baseCollection.ToElements().Where(t => t is SpatialEvent)

答案 1 :(得分:0)

该错误基本上表明标识符elementType不是实际类型,您需要将其替换为具体类型。