将类型转换为 DBSet<>
Casting a Type to DBSet<>
是否可以在 C# 中转换类型定义?比如下面的:
Type t = typeof(Activity) as typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
或试图强制转换:
Type t2 = typeof(System.Data.Entity.DbSet<MyDomain.Activity>) typeof(Activity);
我想创建类型定义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
}
I want to create a type definition System.Data.Entity.DbSet<MyDomain.Activity>
所以你实际上是在要求 t
成为 System.Data.Entity.DbSet<MyDomain.Activity>
的类型。为什么需要将一种类型转换为另一种类型? MyDomain.Activity
类型与您实际请求的类型无关。
这应该适合你:
Type t = typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
如果你还没有 MyDomain.Activity
的类型,你应该使用 Type.MakeGenericType
:
Type dbSetType = typeof(System.Data.Entity.DbSet<>);
Type t = dbSetType.MakeGenericType(yourActivityType);
是否可以在 C# 中转换类型定义?比如下面的:
Type t = typeof(Activity) as typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
或试图强制转换:
Type t2 = typeof(System.Data.Entity.DbSet<MyDomain.Activity>) typeof(Activity);
我想创建类型定义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
}
I want to create a type definition
System.Data.Entity.DbSet<MyDomain.Activity>
所以你实际上是在要求 t
成为 System.Data.Entity.DbSet<MyDomain.Activity>
的类型。为什么需要将一种类型转换为另一种类型? MyDomain.Activity
类型与您实际请求的类型无关。
这应该适合你:
Type t = typeof(System.Data.Entity.DbSet<MyDomain.Activity>)
如果你还没有 MyDomain.Activity
的类型,你应该使用 Type.MakeGenericType
:
Type dbSetType = typeof(System.Data.Entity.DbSet<>);
Type t = dbSetType.MakeGenericType(yourActivityType);