【发布时间】:2015-05-16 01:31:15
【问题描述】:
如何将匿名类型 T 转换为强类型类
我有这个类,它有两个作为匿名类型 T 的 in 参数。该方法有时应该采用任何类型的参数。
我已尝试使用 var rest = pointOfSalesList.ChangeType(model, typeof(List<PointOfSaleModel>)); No errors is received 但变量 pointOfSalesList 未转换为强类型 List<PointOfSaleModel>。
internal override void Load<T>(T data, List<T> model)
{
// this does't work
var pointOfSalesList = Convert.ChangeType(model, typeof(List<PointOfSaleModel>));
}
我想将List<T> model参数转换为强类型的类
internal class PointOfSaleModel : IPointOfSaleModel
{
public Guid PointOfSaleProviderUniqueId { get; set; }
public string CorporateId { get; set; }
public string Name { get; set; }
public string Adress { get; set; }
public int? ZipCode { get; set; }
public string Phone { get; set; }
public string ContactPerson { get; set; }
public string Email { get; set; }
public bool Status { get; set; }
}
我已经尝试了一天来解决这个问题。
【问题讨论】:
-
你为什么要改变类型?这看起来不是一个合适的解决方案;也许您应该将 T 更改为
IPointOfSaleModel并删除类型参数? -
T不是 anonymous,它是 generic,这意味着它可以是任何类型(因为没有明确的限制)如果 @987654329 @是int?您如何将其“转换”为PointOfSaleModel? -
你想在
Load()的转换中做什么? -
请提供一个包含
T实际列表的示例,并解释为什么您使用select new { ... }创建匿名类型的实例,而不是直接实例化您似乎实际需要的强类型类select new PointOfSaleModel() { ....}. -
@eFlag "什么时候适合使用 T" 无论
T是什么,当您的方法有效时。你可以在一定程度上限制T(强制它成为一个类,实现一个特定的接口,有一个无参数的构造函数等)但是如果你的方法只适用于一种类型,那么它不是“通用的”。