gpt4 book ai didi

c# - 反射不触发参数化构造函数c#

转载 作者:行者123 更新时间:2023-12-02 19:16:48 24 4
gpt4 key购买 nike

我正在尝试使用 Activator.CreateInstance 初始化一个类,其中相应的类具有如下所示的三个构造函数,当我尝试通过传递 bool 值来创建实例时在 Activator.CreateInstance 方法中它抛出错误没有为此对象定义无参数构造函数但它成功地为 stringint 值创建类实例。

public class MyType
{
//public MyType()
//{

//}

public MyType(string value)
{
FlagString = value;
}

public MyType(int value)
{
FlagInt = value;
}

public MyType(bool value)
{
FlagBool = value;
}

public string FlagString { get; set; }
public int FlagInt { get; set; }
public bool FlagBool { get; set; }
}


class Program
{
static void Main(string[] args)
{

MyType stringVal = (MyType)Activator.CreateInstance(typeof(MyType), "Yes");
string s = stringVal.FlagString;

MyType intVal = (MyType)Activator.CreateInstance(typeof(MyType), 1);
int s1 = stringVal.FlagInt;

MyType boolValue = (MyType)Activator.CreateInstance(typeof(MyType), true); //Throws error
bool s2 = stringVal.FlagBool;
}
}

我不知道为什么构造函数 public MyType(bool value) 没有被调用以获得 bool 值,请帮助我解决这个问题。

最佳答案

这是因为 Activator.CreateInstance 存在重载,该重载采用 bool 作为第二个参数 see here 。快速修复是将参数强制转换为 object 以强制其使用正确的重载:

MyType boolValue = (MyType)Activator.CreateInstance(typeof(MyType), (object)true);

或者将其作为数组传递:

MyType boolValue = (MyType)Activator.CreateInstance(typeof(MyType), new object[] {true});

关于c# - 反射不触发参数化构造函数c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63601359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com