【发布时间】:2018-01-10 20:23:03
【问题描述】:
我正在尝试对数据访问层进行单元测试,其中每个实体都应实现包含 Save() 和 Delete() 方法的接口。我想遍历每个实体模型并执行各种测试,使用反射似乎很简单:
[TestMethod]
public void AllDalModelsImplementIMyDALObject()
{
Assembly dalAssm = typeof(MyDAL.DataModels.MyEntity1).Assembly;
foreach (Type t in dalAssm.GetTypes().Where(t => t.IsClass && t.Namespace == "MyDAL.DataModels").ToList())
{
// Do stuff here
TestContext.WriteLine(t.Name + " " + t.Namespace);
}
}
但是当我查看输出时,除了所有看起来像 Types 的“是类”的东西之外,我还看到为我的 Save 和 Delete 方法的每个实现编写的调试行:
TestContext Messages:
MyEntity1 MyDAL.DataModels
MyEntity2 MyDAL.DataModels
MyEntity3 MyDAL.DataModels
MyEntity4 MyDAL.DataModels
<Save>d__8 MyDAL.DataModels // what are these and how do I filter them out?
<Delete>d__9 MyDAL.DataModels
<Delete>d__8 MyDAL.DataModels
<Save>d__9 MyDAL.DataModels
<Save>d__8 MyDAL.DataModels
<Delete>d__9 MyDAL.DataModels
<Save>d__8 MyDAL.DataModels
<Delete>d__9 MyDAL.DataModels
所以我的问题是这些是什么?为什么 GetTypes() 会返回它们,为什么 t => t.IsClass 不将它们过滤掉?我可以通过查看名称是否以< 开头来过滤它们,但有没有更好的方法?
【问题讨论】:
-
您看到的是编译器生成的闭包类型。
-
好的,这个术语可以帮助我在谷歌上找到更好的东西,如果没有别的!用我的答案显示此链接:stackoverflow.com/questions/32697570/… 如果您想将其转换为答案,我可以相信您...谢谢@SLaks
标签: c# reflection