这是我的问题:
我有功能
public static void fillObject(object [] obs, DataTable dt)
{
for (int j = 0; j < dt.Rows.Count; j++)
{
DataRow dr = dt.Rows[j];
fillObject(obs[j], dr);
}
}
obs
是一个类型的类的数组(比如说“羊”这个例子)当我调试时我得到obs[j]
是null
而不是对象类型sheep
所以我需要做一些像
obs[j] = new sheep();
任何想法?
答案 0 :(得分:5)
如果您想强烈键入解决方案,可以使用泛型
public static void FillObject<T>(T [] obs, DataTable dt) where T: new
{
//...
obs[j] = new T();
}
然后你会调用像
这样的函数FillObject<Sheep>(mySheep, dt);
答案 1 :(得分:0)
很难确切地说出你的意思;根据具体情况,您可以执行以下操作之一:
您可以将构造函数传递给方法:
public static void fillObject(object [] obs, DataTable dt, Func<object> builder)
{
for (int j = 0; j < dt.Rows.Count; j++)
{
DataRow dr = dt.Rows[j];
if (obs[j] == null)
obs[j] = builder();
fillObject(obs[j], dr);
}
}
或者,如果您知道类型,则可以使用构造函数字典:
Dictionary<Type, Func<object>> sBuilders = new Dictionary<Type, Func<object>>
{
{ typeof(Type1), () => new Type1() },
{ typeof(Type2), () => new Type2() },
// etc...
};
public static void fillObject(object [] obs, DataTable dt, Type pType)
{
for (int j = 0; j < dt.Rows.Count; j++)
{
DataRow dr = dt.Rows[j];
if (obs[j] == null)
obs[j] = sBuilders[pType]();
fillObject(obs[j], dr);
}
}