为类创建实例对象

本文关键字:对象 实例 创建 | 更新日期: 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
}