Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法调用通过反射检索的变量类型_C#_Reflection - Fatal编程技术网

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);
}