基本上我要做的是创建一个可以使用
批量创建对象的类Activator.CreateInstance(Type type, params object[] args)
我需要将所有对象蓝图传递给一个名为ObjectMap的类的构造函数。它需要是一个类型和参数的对。如果允许解决方案,它也可以是另一个类而不是构造函数的方法。
有点像
new ObjectMap([Type, somevalue, somevalue, somevalue], [Type, somevalue], [Type] ...)
或
Resources.AddObjectMap([Type, somevalue, somevalue, somevalue], [Type, somevalue], [Type] ...)
我不知道如何制作它,以便你可以传递可变数量的参数与可变数量的参数(甚至0)。哎呀,我甚至很难解释这个问题。问我一些你不清楚的事情= S
Gr.Viller
答案 0 :(得分:6)
我建议你将“type和args”封装到特定类型中......然后你可以使用params
数组。例如:
// TODO: Find a better name :)
public class TypeBlueprint
{
public Type Type { get; set; }
public List<object> Arguments { get; set; }
public TypeBlueprint()
{
this.Arguments = new List<object>();
}
public TypeBlueprint(Type type, params object[] arguments)
{
this.Type = type;
this.Arguments = arguments.ToList();
}
}
然后:
public ObjectMap(params TypeBlueprint[] blueprints)
并将其命名为:
var map = new ObjectMap(new TypeBlueprint(typeof(Foo), "x", "y", "z"),
new TypeBlueprint { Type = typeof(Bar),
Arguments = { 1, 2, 3 } });
它演示了使用构造函数参数和对象初始值设定项来指定类型和参数。使用最适合你的。
答案 1 :(得分:0)
我认为这就是你要求的......(我认为我们的问题的真正答案是在函数参数列表中使用params
)
实现:
public class ObjectMap
{
public object[] ActivatedObjects { get; private set; }
public ObjectMap(params object[][] itemsToMap)
{
ActivatedObjects = itemsToMap.Select(ActivateItem).ToArray();
}
private object ActivateItem(object[] itemToActivate)
{
return Activator.CreateInstance((Type)itemToActivate[0], itemToActivate.Skip(1).ToArray());
}
}
基本单元测试:
[TestClass]
public class UnitTest3
{
[TestMethod]
public void TestMethod1()
{
var map = new ObjectMap(new object[] {typeof(Class1)},
new object[] {typeof(Class2), "Arg One", 2});
Assert.AreEqual(2, map.ActivatedObjects.Length);
Assert.IsInstanceOfType(map.ActivatedObjects[0], typeof(Class1));
Assert.IsInstanceOfType(map.ActivatedObjects[1], typeof(Class2));
}
}
public class Class1
{
public Class1()
{
}
}
public class Class2
{
public Class2(string arg1, int arg2)
{
}
}