小编Pem*_*ing的帖子

按字符串创建类的实例,但将隐式转换考虑在内 - C#Reflection

我处于这样一种情况,我需要创建一个给定Type(作为字符串)的对象实例,以及一个构造函数参数数组.

这就是我实现的目标:

public object Create(string Name, params object[] Args)
{
    return Activator.CreateInstance(Type.GetType(Name), Args);
}
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作,但是存在问题; 它不会将隐式转换考虑在内.


让我解释一下我的意思,说我们有一个简单的类,其中隐式转换为int定义

public class ImplicitTest
{
    public double Val { get; set; }

    public ImplicitTest(double Val)
    {
        this.Val = Val;
    }

    public static implicit operator int(ImplicitTest d)
    {
        return (int)d.Val;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有一个使用int作为构造函数参数的类

public class TestClass
{
    public int Val { get; set; }        

    public TestClass(int Val)
    {
        this.Val = Val;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在说我们想要创建一个TestClass实例,我们可以这样做: new TestClass(5).在这种情况下,我们使用构造函数指定的确切参数类型(int).但是我们也可以使用ImplicitTest类创建类的实例,如下所示:new TestClass(new ImplicitTest(5.1)).这是有效的,因为参数是从ImplicitTest隐式转换为int.然而,Activator.CreateInstance()不会这样做.


我们可以使用Create(string Name, params …

.net c# reflection constructor implicit-conversion

6
推荐指数
1
解决办法
629
查看次数

标签 统计

.net ×1

c# ×1

constructor ×1

implicit-conversion ×1

reflection ×1