我有一个通用方法,我想向它发送一个取自字符串变量的类型。
我的通用方法的签名是:
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指令或程序集引用?)
我需要一种解决方法,让我发送一个非正式定义的类型到泛型方法。
答案 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?