1

昨夜、例によるキャストのこの素晴らしい操作について学びました。既存のインスタンスへの参照を使用して、いくつかのタイプのコレクションを生成する非常にクールな方法です。

私の問題は、これはインスタンスを明示的に作成すると機能しますが、アクティベーターを使用してタイプからインスタンス化すると、生成されるコレクションのタイプが不正確になることです。

    class TestCollectionContent
    {
        public int id { get; private set; }
    }

    [Test]
    public void TestListCastCreation()
    {
        var explicitCast = new TestCollectionContent ();    //This casts as TestCollectionContent
        var explicitList = MakeList (explicitCast);         //This casts as List<CommandWithExecute>
        explicitList.Add (new TestCollectionContent ());

        Type clazz = typeof(TestCollectionContent);
        var implicitCast = Activator.CreateInstance (clazz);//This casts as TestCollectionContent
        var implicitList = MakeList (implicitCast);         //This casts as List<object>
        implicitList.Add (new TestCollectionContent ());

        Assert.AreEqual (explicitCast.GetType (), implicitCast.GetType ()); //Succeeds
        Assert.AreEqual (explicitList.GetType (), implicitList.GetType ()); //FAILS!
    }

    public static List<T> MakeList<T>(T itemOftype)
    {
        List<T> newList = new List<T>();
        return newList;
    } 

私の目的では、コレクションを正しくキャストすることが不可欠です。何かご意見は?

Unity3D で C# を使用していることに注意してください (.Net 3.5 に似たものを使用します)。

4

2 に答える 2