[英]How to return a dynamic object from a generic function - error
我有两个通用功能。 在第一个字典中,我填充字典,然后调用下一个泛型函数将字典转换为对象。
在这里,我需要返回T
泛型对象,而不是指定一个特定的对象。 我无法实现这一目标。 它显示错误:
类型T必须是引用类型,才能在通用方法或类型中将其用作参数“ T”。
public T Fill<T>()
{
Dictionary<string,string> d = new Dictionary<string,string>();
//filled dictionary -----
SomeClass dObject = ToObject<SomeClass>(d);
//[---Here I need to return a dynamic object rather than fixing to SomeClass--]
T dObject = ToObject<T>d); ///* Not able to acheive this *///
return (T)Convert.ChangeType(dObject, typeof(T));
}
private T ToObject<T>(IDictionary<string, string> dict)
where T : class,new()
{
T t = new T();
PropertyInfo[] properties = t.GetType().GetProperties();
//--- code to convert object to dictionary
return t;
}
由于ToObject
方法受class
和new()
约束,因此您还需要将其与Fill
方法匹配。
public T Fill<T>() where class, new()
但是,似乎不需要class
约束,因此可以根据需要将其删除。
在这行代码中,您有一个约束,即T
必须是一个class
并且它必须具有一个无参数的构造函数( new
):
private T ToObject<T>(IDictionary<string, string> dict)
where T : class,new()
您的Fill
方法的签名如下:
public T Fill<T>()
看到没有约束,这意味着我可以将struct
或任何其他类型传递给它,即使是没有无参数构造函数的类型。 这就是为什么您得到错误。 您需要定义相同的约束或比在ToObject<T>
方法上定义的约束更具体的约束。 要解决您的问题,只需执行以下操作:
public T Fill<T>() where class, new()
现在Fill<T>
具有相同的约束,因此我只能使用具有无参数构造函数的类来调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.