2

これらのパラメーターを受け入れる型があります。

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

args パラメーターに object[] を渡すことにより、Activator.CreateInstance (型と引数を受け入れるオーバーロード) を使用して、この型のインスタンスを作成しようとしています。

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

//DecimalSeries implements ISeries<decimal>

タイプ 'SmaSeries' のコンストラクターが見つかりません

アクティベーターがコンストラクターを見つけるように引数を修正する方法はありますか?

ありがとう。

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> { }

おそらく、あなたのコンストラクターまたはタイプの1つが公開されていないのでしょうか?

于 2012-09-28T11:55:59.117 に答える
3

案の定、それはバグでした。パラメータを動的に追加するためにオブジェクトのリストを作成していましたが、アクティベータを呼び出すときにToArrayを実行するのを忘れていました。また、argsはparams object []であるため、メンバーを取得する代わりにリストを取得しました。時間を無駄にして申し訳ありません。この投稿に返信/コメントしてくれたすべての人に感謝します。

于 2012-09-28T14:17:35.803 に答える