将类型从字符串变量发送到泛型方法

时间:2013-02-06 07:35:50

标签: c# generics methods

我有一个通用方法,我想向它发送一个取自字符串变量的类型。

我的通用方法的签名是:

public ICollection<TEntity> agregarItems<TEntity>(ComboBox cb) where TEntity : new()

我想这样做:

Type tipo = Type.GetType("MyNamespace." + cb.Name);

cliente.GetType().GetProperty(cb.Name).SetValue(cliente,
        agregarItems<tipo>(cb), null);

其中cb是ComboBox对象,而cliente是类的实例。

cb.Name可能是“Phone”,而MyNamespace中已存在Phone类。

由于tipo未正式定义,因此出现以下错误:

  

找不到类型或命名空间名称'tipo'(您是否缺少using指令或程序集引用?)

我需要一种解决方法,让我发送一个非正式定义的类型到泛型方法。

2 个答案:

答案 0 :(得分:0)

Type tipo = Type.GetType("TypeName");

仅适用于非常基本的类型。

您要引用的类型可能位于System.Web,System等程序集中。 引用此程序集是不够的,还需要告诉运行时您的类型是哪种程序集。

所以试试

Type tipo = Type.GetType(YourType.AssemblyQualifiedName);

而不是

Type tipo = Type.GetType(YourType.FullName);

此外,您正在使用运行时确定的类型(tipo)来创建编译时确定的泛型重载。那是行不通的。

您需要修改泛型方法以将类型作为参数传递。

答案 1 :(得分:0)

您需要做的是使用您在此处显示的方式获得的类型(使用Activator)创建实例:

How to dynamically create generic C# object using reflection?