C# 如何从泛型函数返回动态对象-错误

C# 如何从泛型函数返回动态对象-错误,c#,dictionary,C#,Dictionary,我有两个通用函数。在第一个函数中,我填充一个字典,然后调用下一个泛型函数将字典转换为对象 这里我需要返回到T通用对象,而不是指定一个特定的对象。我无法做到这一点。它显示错误: 类型T必须是引用类型,才能将其用作泛型方法或类型中的参数“T” public T Fill() { 字典d=新字典(); //填充词典----- SomeClass-dObject=tobject(d); //[---这里我需要返回一个动态对象,而不是固定到某个类--] T dObject=ToObjectd);//*无法

我有两个通用函数。在第一个函数中,我填充一个字典,然后调用下一个泛型函数将字典转换为对象

这里我需要返回到
T
通用对象,而不是指定一个特定的对象。我无法做到这一点。它显示错误:

类型T必须是引用类型,才能将其用作泛型方法或类型中的参数“T”

public T Fill()
{
字典d=新字典();
//填充词典-----
SomeClass-dObject=tobject(d);
//[---这里我需要返回一个动态对象,而不是固定到某个类--]
T dObject=ToObjectd);//*无法实现此目标*///
return(T)Convert.ChangeType(dObject,typeof(T));
}
私有T对象(字典目录)
其中T:class,new()
{
T=新的T();
PropertyInfo[]properties=t.GetType().GetProperties();
//---将对象转换为字典的代码
返回t;
}

因为
ToObject
方法受
class
new()
的约束,所以您还需要将其与
Fill
方法相匹配

public T Fill<T>() where class, new()
public T Fill()其中类,new()

但是,似乎不需要
约束,因此您可以根据需要删除它。

在这一行代码中,您有一个约束,即
t
必须是
,并且它必须有一个无参数构造函数(
new
):

请看,没有任何约束意味着我可以向其传递
结构或任何其他类型,即使是没有无参数构造函数的类型。这就是为什么会出现错误。您需要定义相同的约束或比在
ToObject
方法上定义的约束更具体的约束。要解决您的问题,只需执行以下操作:

public T Fill<T>() where class, new()
public T Fill()其中类,new()

现在
Fill
具有相同的约束,因此我只能使用具有无参数构造函数的类调用它。

您需要将
class
new()
约束添加到
Fill
方法,以便它与
ToObject
函数匹配。我现在已经添加了-public T Fill(),其中T:class,new()但是它仍然是相同的错误否,现在您有一个不同的错误,因为
dObject
声明了两次。哦,对不起,它工作正常!非常感谢。。我真的很感激你。。我不知道它是怎么工作的。我已经删除了答案(发生在我们最好的人身上;)
private T ToObject<T>(IDictionary<string, string> dict)
    where T : class,new()
public T Fill<T>()
public T Fill<T>() where class, new()