我正在使用// 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");
我在这里想念什么?我引用了dll ...代码运行时项目在那里。为什么会出现编译器错误?
答案 0 :(得分:2)
在调试器中看到的内容不计在内,因为在调试器中看到的所有内容仅在运行时存在。编译器不知道运行时会发生什么,除了它将是InventoryReportBodyElement
的实例(或子类的实例)之外。编译器只能看到的是您的类定义,并且它肯定不包含名为Class
的成员。
看来实例的运行时类型实际上是InventoryInstance
,实际上是定义Class
属性的原因。在这种情况下,您可能应该使用OfType
来过滤集合:
ddrMessage.DdrInstances.OfType<InventoryInstance>().Where(m => m.Class == "CCM_DiscoveryData");