“类型不包含类的定义”错误,但总计

时间:2019-04-24 03:44:42

标签: c#

我正在使用// import scala.reflect.macros.blackbox.context // NO! import scala.reflect.macros.whitebox.context def impl[T: c.WeakTypeTag](c: Context)(struct: c.Tree): c.Tree 在C#项目中工作。我有一个调用的方法,该方法枚举了一些我需要了解的有关设备的信息,并将其格式化为Configuration Manager可以使用的格式。我最终得到一个Microsoft.ConfigurationManagement.Messaging.dll对象,它们的定义如下:

Collection<InventoryReportBodyElement>

在这里我很困惑。我需要编辑集合中一项的属性,但是当我尝试使用Linq方法语法选择正确的实体时,出现此编译器错误:

namespace Microsoft.ConfigurationManagement.Messaging.Messages
{
    [XmlInclude(typeof(InventoryInstance))]
    [XmlInclude(typeof(ProductInfo))]
    [XmlInclude(typeof(InventoryInstanceGeneric))]
    [XmlInclude(typeof(StateMessage))]
    public class InventoryReportBodyElement
    {
        public InventoryReportBodyElement();
    }
}

班级突出显示为:

  

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

但是,当我调试时...我完全看到了所有属性,包括我想用来过滤到正确项目的类名。如果我注释掉选择的代码并逐步浏览集合中的每个项目,则可以在“本地窗口”中看到所需的属性。

InventoryReportBodyElement OSClass = ddrMessage.DdrInstances.Where(m => m.Class == "CCM_DiscoveryData");

enter image description here

我在这里想念什么?我引用了dll ...代码运行时项目在那里。为什么会出现编译器错误?

1 个答案:

答案 0 :(得分:2)

在调试器中看到的内容不计在内,因为在调试器中看到的所有内容仅在运行时存在。编译器不知道运行时会发生什么,除了它将是InventoryReportBodyElement的实例(或子类的实例)之外。编译器只能看到的是您的类定义,并且它肯定不包含名为Class的成员。

看来实例的运行时类型实际上是InventoryInstance,实际上是定义Class属性的原因。在这种情况下,您可能应该使用OfType来过滤集合:

ddrMessage.DdrInstances.OfType<InventoryInstance>().Where(m => m.Class == "CCM_DiscoveryData");