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

在上面的代码中,我想知道是否有一种方法可以使GetObjectFromDataContextinto GetObjectFromDataContext<type>,而不必为每个类获取 type.Name 并为每个类创建一个案例。这可以做到吗?

如果问题不清楚,请告诉我。

4

2 回答 2

0

是否所有允许的类型都实现了一个通用接口?如果是这样,那么是的;更改GetObjectFromDataContext为接受基类型作为泛型参数。

但是,必须在编译时确定通用参数。否则该功能将如何提供类型安全?那时你也可以把所有东西都传递出去object

编辑:根据您的更新。

必须能够Type在运行时传入一个参数,然后不,你不能做你想做的事。由于这一切都发生在运行时,您将不得不有选择地调用通用版本。出于同样的原因,您不能使用参数的重载;GetTableType你需要一个演员,因为它返回一个ITable.

您真的需要使用Type参数动态执行此操作吗?

于 2013-03-06T22:28:43.020 回答
0

你可以这样写:

private object GetDataContextedObject<T>(object jobObject)
{
    return GetObjectFromDataContext<T>(jobObject);
}
于 2013-03-06T22:29:44.957 回答