将类型转换为DBSet <>

won*_*nea 5 .net c# generics reflection

是否可以在C#中转换类型定义?如下:

Type t = typeof(Activity) as typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
Run Code Online (Sandbox Code Playgroud)

或者试图逼迫演员:

Type t2 = typeof(System.Data.Entity.DbSet<MyDomain.Activity>) typeof(Activity);
Run Code Online (Sandbox Code Playgroud)

我想创建一个类型定义 System.Data.Entity.DbSet<MyDomain.Activity>

我这样做是因为我在我的域上使用反射,试图在上下文中提取属性,以防有人问.

// get types we are interested in IHit
var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
                where t.GetInterfaces().Contains(typeof(IHit))
                         && t.GetConstructor(Type.EmptyTypes) != null
                select Activator.CreateInstance(t) as IHit;
// loop and cast
foreach (var instance in instances)
{
    Type t = instance.GetType()
    Type t2 = typeof(System.Data.Entity.DbSet<t>) as typeof(t);

    // do something with type 2
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 5

我想创建一个类型定义 System.Data.Entity.DbSet<MyDomain.Activity>

所以你实际上是要求t成为那种类型System.Data.Entity.DbSet<MyDomain.Activity>.为什么你需要投射另一种?该类型MyDomain.Activity不必对您实际请求的类型执行任何操作.

这应该适合你:

Type t = typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
Run Code Online (Sandbox Code Playgroud)

如果您还没有类型MyDomain.Activity,您应该使用Type.MakeGenericType:

 Type dbSetType = typeof(System.Data.Entity.DbSet<>);
 Type t = dbSetType.MakeGenericType(yourActivityType);
Run Code Online (Sandbox Code Playgroud)