2012-07-17 68 views
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(); 

任何想法的对象类型?

+0

你怎么知道你需要用什么类型来创建obs [j]? – 2012-07-17 17:48:12

+0

'obs [j] =新羊();'应该做你所描述的。除非你的意思是'obs'本身是空的。在这种情况下,您需要说'obs = new object [100];' – sblom 2012-07-17 17:48:55

+0

粘贴您的错误消息,并突出显示引发异常的代码行。 – 2012-07-17 17:49:52

回答

5

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

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

    obs[j] = new T(); 
} 

这样,你会调用该函数像

FillObject<Sheep>(mySheep, dt); 
+1

@Asif:感谢编辑! – 2012-07-17 17:59:46

+0

工作就像一个魅力TNX很多!只需要把新的“()” – Sophex 2012-07-17 21:03:27

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