泛型中类型参数为动态时如何处理

shengchuangsoftware 2013-02-20 04:53:08



public class A { }
public class B { }
public class C { }

public class X<T>
{
}

public class Demo
{
public void Test()
{
var x = new X<A>();
}
}


当 var x = new X<A>(); 中,A是未知时,如何处理,只给定字符串形式,如:"A","B","C"。
...全文
164 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
showjim 2013-02-21
字符串的话,只能反射
object x = Activator.CreateInstance(typeof(X<>).MakeGenericType(assembly.GetType("A"))))
  • 打赏
  • 举报
回复
接口如何实现?
  • 打赏
  • 举报
回复
qldsrx 2013-02-20
最好是通过接口来实现,那样效果最高,如果实在不行,就通过反射,给定类名字符串反射出Type,然后再反射泛型方法的Methodinfo,最后通过Methodinfo的Invoke方法进行调用。
  • 打赏
  • 举报
回复
实际应用中的情况: 项目中用到Entity Framework,所有实体都继承自Base类。


    public class Base
    {
        public virtual int Id { get; set; } //主键
    }

    public partial class A : Base
    {
        public string AField { get; set; }
        //……
    }

    public partial class B : Base
    {
        public string BField { get; set; }
        //……
    }

    public partial class C : Base
    {
        public string CField { get; set; }
        //……
    }

    //N多个实体类
现在有这样一个需求,给定两个参数, ClassName(string) 类名/表名 ItemId(int) 数据项Id 判断在数据库中是否存在这样的记录。
  • 打赏
  • 举报
回复
引用 2 楼 wddw1986 的回复:
工厂 但是你最需要考虑的问题是 var x = new X<A>(); 这个x的使用者怎么办?你自己先想好怎么处理不同的x再说。
完整的代码是这样的:


    [Model]
    public class Base { }
    public class A:Base { }
    public class B:Base { }
    public class C:Base { }

    [DbSet]  
    public class X<T> where T : Base
    {
    }
  
    public class Demo
    {
        public void Test()
        {
            var x = new X<?>(); //这里的?只能获得类的字符串形式,如"A"、"B"……
            //这里可以访问到Base的对象
        }
    }
  • 打赏
  • 举报
回复
weizhuangwen 2013-02-20

统一用基类object
  • 打赏
  • 举报
回复
cheng2005 2013-02-20
工厂 但是你最需要考虑的问题是 var x = new X<A>(); 这个x的使用者怎么办?你自己先想好怎么处理不同的x再说。
  • 打赏
  • 举报
回复


    public class A { }
    public class B { }
    public class C { }
 
    public class X<T>
    {
    }
 
    public class Demo
    {
        public void Test()
        {
            var x = new X<?>(); //这里的?只能获得类的字符串形式,如"A"、"B"……
        }
    }
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-02-20 04:53
社区公告

让您成为最强悍的C#开发者