0

这是我的问题:

我有这个功能

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();

有任何想法吗?

4

2 回答 2

5

如果你想强类型化你的解决方案,你可以使用泛型

public static void FillObject<T>(T [] obs, DataTable dt) where T: new
{
    //...

    obs[j] = new T();
}

然后你会调用这个函数

FillObject<Sheep>(mySheep, dt);
于 2012-07-17T17:49:34.180 回答
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);
   }
}
于 2012-07-17T17:53:24.740 回答