2

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

我的通用方法的签名是:

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”并且Phone 类已经存在于MyNamespace 中。

因为没有正式定义tipo,所以我收到以下错误:

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

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

4

2 回答 2

0

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

如何使用反射动态创建通用 C# 对象?

于 2013-02-06T07:45:13.753 回答
0
Type tipo = Type.GetType("TypeName");

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

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

所以试试

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

代替

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

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

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

于 2013-02-06T07:41:50.630 回答