为类创建实例对象
本文关键字:对象 实例 创建 | 更新日期: 2023-09-27 18:15:25
我试图将对象转换为类T并返回它。
实体框架类:
public partial class Unicorn
{
public string ColorCode { get; set; }
public int Age { get; set; }
public Unicorn() { }
}
转换功能:
private T ConvertMagicObjectTo<T>(object obj) where T : new()
{
return (T)Activator.CreateInstance(typeof(T), obj);
}
当我运行:
var strongUnicorn = ConvertMagicObjectTo<Unicorn>(myTestObj);
我得到错误"构造函数未找到",即使Unicorn.cs类有一个构造函数。
如何解决这个问题?
将一个对象传递给Activator.CreateInstance
,这意味着需要一个带有一个参数的构造函数。Unicorn
构造函数没有参数。要么给构造函数添加一个参数,要么从对CreateInstance
的调用中删除它。
不清楚myTestObj
的目的是为了知道它是否应该被用作结构的一部分,或者你期望它做什么。
看起来convert方法失败了,因为你试图用构造函数参数调用CreateInstance方法,而独角兽类型没有接受参数的构造函数。
相反,由于添加了new()
泛型约束,您可能希望使用空构造函数创建一个新的局部对象,并像这样填充它:
private T ConvertMagicObjectTo<T>(object src) where T : new()
{
var dest = new T();
// map source to dest
return dest;
}
或者创建一个接受参数的构造函数:
public Unicorn(object src)
{
// map source to local instance.
}
您的ConvertMagicObjectTo<T>
不会将obj
转换为T,它创建了一个新的T实例并将obj
传递给构造函数。Unicorn类没有一个接受1个参数的构造函数,这就是为什么你会得到这个错误。
不需要任何特殊的方法来将对象强制转换为另一种类型。只需使用
var strongUnicorn = (Unicorn)myTestObj;
如果你知道myTestObj
可以强制转换为Unicorn或
var strongUnicorn = myTestObj as Unicorn;
if (strongUnicorn != null)
{
//do something with it
}