2

我有一个接受这些参数的类型:

public SmaSeries(ISeries<decimal> parent, int periods, TierKind? runOnTier = null) 

我正在尝试通过在 args 参数中传递 object[] 来使用 Activator.CreateInstance (接受类型和 args 的重载)创建这种类型的实例:

 new object[] 
 {
    new DecimalSeries(),
    20,
    new Nullable<TierKind>(TierKind.Client)
 }

//DecimalSeries implements ISeries<decimal>

找不到类型“SmaSeries”的构造函数

有没有办法修复 args 以便激活器找到构造函数?

谢谢。

4

3 回答 3

6

在 .NET 4.5 甚至 2.0 中都能正常工作

using System;

class SmaSeries
{
    public SmaSeries(ISeries<decimal> parent, int periods,
         TierKind? runOnTier = null) { }
    static void Main()
    {
        object[] args = new object[] 
         {
            new DecimalSeries(),
            20,
            new Nullable<TierKind>(TierKind.Client)
         };

        object obj = Activator.CreateInstance(typeof(SmaSeries), args);
    }
}
enum TierKind { Client }
interface ISeries<T> { }
class DecimalSeries : ISeries<decimal> { }

我想也许:您的构造函数或其中一种类型可能不是公开的?

于 2012-09-28T11:55:59.117 回答
3

果然是个bug。我正在创建对象列表以动态添加参数,然后在调用激活器时忘记执行 ToArray,并且由于 args 是参数对象 [],因此它采用列表而不是其成员。很抱歉浪费您的时间,并感谢所有回复/评论这篇文章的人。

于 2012-09-28T14:17:35.803 回答
0

DateTimeConverter在将 Unity 项目导出到 iOS 后,我收到了这个错误。原来项目中的一个 DLL 使用反射来获取类型转换器,因此执行时的代码需要一段DateTimeConverter时间,在原始代码库中没有明确引用它。我怀疑这导致程序集在代码剥离过程中被排除在最终构建之外。

解决方案只是添加一个:

new System.ComponentModel.DateTimeConverter();

源代码中的任何位置。这表明构建过程包含必要的代码。

于 2018-08-13T02:08:30.203 回答