gpt4 book ai didi

c# - Activator.CreateInstance(t, 42, args) 找不到构造函数

转载 作者:行者123 更新时间:2023-11-30 19:51:31 25 4
gpt4 key购买 nike

我在工厂模式样式函数中使用(稍微扩展的版本)以下代码:

<p></p>

<p>public class SingleItemNew : CheckoutContext
{
public BookingContext Data { get; set; }
public SingleItemNew(BookingContext data)
{
Data = data;
}
}
public CheckoutContext findContext(BookingContext data)
{
Type contextType = Type.GetType("CheckoutProcesses." + data.Case.ToString());
CheckoutContext output =
Activator.CreateInstance(contextType, BindingFlags.CreateInstance, new[] { data }) as CheckoutContext;
return output;
}</p>

但是,它在运行时抛出一个 constuctor not found 异常,我不明白为什么。

data.Case.ToString() 方法返回一个类的名称,SingleItemNew,它有一个接受单个参数的构造函数。

有人知道问题出在哪里吗?

干杯,埃德

最佳答案

试试这个:

  Type contextType = Type.GetType("CheckoutProcesses." + data.Case.ToString());
CheckoutContext output =
(CheckoutContext)Activator.CreateInstance(contextType, data);

您的代码不起作用的原因是 Activator.CreateInstance 没有您想要的重载。所以你可能想知道为什么代码可以编译!原因是,它有一个采用 (Type type, params object[] args) 的重载,它与您的方法调用相匹配,因此它可以编译,但在运行时,它会在您的类型中搜索采用 BindingFlagsBookingContext[],这显然不是您的类型。

关于c# - Activator.CreateInstance(t, 42, args) 找不到构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982034/

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