昨晚我通过示例了解了这个奇妙的转换操作:使用对现有实例的引用来生成某些类型的集合的非常酷的方法。
我的问题是,虽然这在您显式创建实例时有效,但如果您使用激活器从类型实例化,则生成的集合类型不准确。
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;
}
出于我的目的,必须正确地转换集合。有什么想法吗?
请注意,我将 C# 与 Unity3D 一起使用(它使用类似于 .Net 3.5 的东西)。