昨夜、例によるキャストのこの素晴らしい操作について学びました。既存のインスタンスへの参照を使用して、いくつかのタイプのコレクションを生成する非常にクールな方法です。
私の問題は、これはインスタンスを明示的に作成すると機能しますが、アクティベーターを使用してタイプからインスタンス化すると、生成されるコレクションのタイプが不正確になることです。
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 に似たものを使用します)。