当我碰到以下问题时,我正在尝试为教育目的编写自己的工厂方法;当试图递归调用我的函数时,我不能将指定的类型传递给泛型接收器。
注意:这可能与设计模式无关,这可能只是我做错的基本事情。无论哪种方式,我都有点难过。
public static T SpawnObject<T>()
{
var objType = typeof(T);
var parameters = objType.GetConstructors().Single().GetParameters();
List<object> paramObjects;
if (!parameters.Any()) return (T)Activator.CreateInstance(objType);
paramObjects = new List<object>();
foreach (var item in parameters)
{
//var arg = Activator.CreateInstance(item.ParameterType);
var paramType = item.ParameterType;
var arg = SpawnObject<paramType>(); // UNABLE TO ID 'PARAMTYPE' ??
paramObjects.Add(arg);
}
T returnInstance = (T)Activator.CreateInstance(objType, paramObjects.ToArray());
return returnInstance;
}
提前感谢任何可以帮助我理解为什么失败的人。
答案 0 :(得分:2)
请参阅上面我链接的问题,为什么不能将变量用作类型参数。
这是一个简单的解决方案:
public static T SpawnObject<T>()
{
return (T)SpawnObject(typeof(T));
}
private static object SpawnObject(Type objType)
{
var parameters = objType.GetConstructors().Single().GetParameters();
List<object> paramObjects;
if (!parameters.Any()) return Activator.CreateInstance(objType);
paramObjects = new List<object>();
foreach (var item in parameters)
{
//var arg = Activator.CreateInstance(item.ParameterType);
var paramType = item.ParameterType;
var arg = SpawnObject(paramType);
paramObjects.Add(arg);
}
return Activator.CreateInstance(objType, paramObjects.ToArray());
}