var type = data.ClientBaseObject.GetType();
var newClientObject = GetDataContextedObject(type, data.ClientBaseObject);
private object GetDataContextedObject(Type type, object jobObject)
{
switch (type.Name.ToUpper())
{
case "JOBNUMBER":
{
return GetObjectFromDataContext<JobNumber>(jobObject);
}
case "NA_HEADER":
{
return GetObjectFromDataContext<NA_Header>(jobObject);
}
}
return null;
}
private object GetObjectFromDataContext<T>(object jobObject) where T: class, IJobID
{
var newObject = jobObject as T;
return _dc.GetTable<T>().FirstOrDefault(j => j.JobID == newObject.JobID);
}
在上面的代码中,我想知道是否有一种方法可以将GetObjectFromDataContext
转换为GetObjectFromDataContext<type>
,而不必为每个类获取type.Name并为每个类创建一个case一。可以这样做吗?
如果问题不明确,请告诉我。
答案 0 :(得分:0)
所有允许的类型是否都实现了通用接口?如果是的话,那么是;更改GetObjectFromDataContext
以接受基类型作为通用参数。
但是,必须在编译时确定泛型参数。否则该功能如何提供类型安全?你也可以在那时以object
传递所有内容。
编辑:根据您的更新。
我必须能够在运行时传入Type
参数,然后不能,你不能做你想做的事。由于这一切都是在运行时发生的,因此您必须有选择地调用泛型版本。出于同样的原因,您无法使用the overload of GetTable
that takes a Type
argument;你需要一个演员,因为它返回ITable
。
您真的需要使用Type
参数动态执行此操作吗?
答案 1 :(得分:0)
你可以这样写:
private object GetDataContextedObject<T>(object jobObject)
{
return GetObjectFromDataContext<T>(jobObject);
}