C# 方法调用通过反射检索的变量类型
作为为早期版本创建解决方案的工作的一部分,我有一个C# 方法调用通过反射检索的变量类型,c#,reflection,C#,Reflection,作为为早期版本创建解决方案的工作的一部分,我有一个类型的列表,我(在完美世界中)希望在其上执行以下代码: foreach (Type entityType in entityTypes) { modelBuilder.Entity<entityType>() .Map(m => m.Requires("Deleted").HasValue(false)) .Ignore(m => m.Deleted); } foreach (Ty
类型的列表,我(在完美世界中)希望在其上执行以下代码:
foreach (Type entityType in entityTypes)
{
modelBuilder.Entity<entityType>()
.Map(m => m.Requires("Deleted").HasValue(false))
.Ignore(m => m.Deleted);
}
foreach (Type entityType in entityTypes)
{
var modelEntity = typeof (DbModelBuilder)
.GetMethod("Entity")
.MakeGenericMethod(new[] {entityType})
.Invoke(modelBuilder, null);
var mappedEntity = typeof (EntityTypeConfiguration<entityType>)
.GetMethod("Map")
.MakeGenericMethod(new[] {entityType})
.Invoke(modelEntity, <parameters>);
}
但是,我仍然需要在modeleentity
上调用.Map()
和.Ignore()
,类型为EntityTypeConfiguration
。这就是我的问题所在,因为我知道(在运行时)T
属于entityType
类型,但我不能简单地调用以下代码:
foreach (Type entityType in entityTypes)
{
modelBuilder.Entity<entityType>()
.Map(m => m.Requires("Deleted").HasValue(false))
.Ignore(m => m.Deleted);
}
foreach (Type entityType in entityTypes)
{
var modelEntity = typeof (DbModelBuilder)
.GetMethod("Entity")
.MakeGenericMethod(new[] {entityType})
.Invoke(modelBuilder, null);
var mappedEntity = typeof (EntityTypeConfiguration<entityType>)
.GetMethod("Map")
.MakeGenericMethod(new[] {entityType})
.Invoke(modelEntity, <parameters>);
}
foreach(在entityTypes中键入entityType)
{
var modelEntity=typeof(DbModelBuilder)
.GetMethod(“实体”)
.MakeGenericMethod(新[]{entityType})
.Invoke(modelBuilder,null);
var mappedEntity=typeof(EntityTypeConfiguration)
.GetMethod(“Map”)
.MakeGenericMethod(新[]{entityType})
.调用(modelEntity,);
}
因为我再次遇到同样的问题,为什么我首先使用反射调用.Entity()
。我是否可以再次使用反射来调用这两个方法,或者我是否可以使用另一种方法直接在modelEntity
上调用它们?解决此问题的一种方法是创建一个通用方法,将三个调用合并为一个,然后使用反射来调用您的方法,如下所示:
void LoopBody<T>() { // Give the method a better name
modelBuilder.Entity<T>()
.Map(m => m.Requires("Deleted").HasValue(false))
.Ignore(m => m.Deleted);
}