【发布时间】:2015-12-23 02:51:50
【问题描述】:
在一条sql语句中join的结果返回多个建模对象,我想了一个方法来建模它们并想出了
class JoinObjectsMapper
{
//add 2 fields one for the PK value and one for the name of the PK
internal readonly Dictionary<Type, object> Objs;
public JoinObjectsMapper(params object[] objs)
{
Objs = new Dictionary<Type, object>();
foreach(var o in objs)
{
Objs[o.GetType()] = o;
}
}
public object this[Type key]
{
get { return Objs[key]; }
set { Objs[key] = key; }
}
}
示例用法:
var custmer = new Customer { customer_id = 1, customer_name = "zxc" };
var order = new Order { order_id = 1, customer_id = 1, order_amount = 200.30m };
var mapper = new JoinObjectsMapper(custmer, order);
var cus = mapper[typeof(Customer)] as Customer;
var order = mapper[typeof(Order)] as Order;
这是有效的,除了我不喜欢我必须在检索对象后强制转换对象的事实,如果我使用泛型,那么它将不适用于 n 个对象,除非我编写了这么多的重载据我所知。
知道如何检索我的对象
var cus = mapper[typeof(Customer)];
var order = mapper[typeof(Order)];
或者
var cus = mapper.Ref<Customer>();
var order = mapper.Ref<Order>();
仍然获得正确的类型并避免强制转换?
【问题讨论】:
-
你不能。为避免强制转换,您需要在编译时知道对象的类型。
-
您不喜欢演员表的运行时影响,还是不得不写出来?
-
@James 不得不写出来
标签: c# generics dictionary