C# 泛型到特定列表在c中返回“无法强制转换错误”
我正在使用.NET4.6,我正在尝试从通用列表创建一个特定列表。编码通用列表:`C# 泛型到特定列表在c中返回“无法强制转换错误”,c#,.net,linq,C#,.net,Linq,我正在使用.NET4.6,我正在尝试从通用列表创建一个特定列表。编码通用列表:` var clients = (from a in accounts group j by new { a.Code, a.Name, a.AddressLine1,
var clients = (from a in accounts
group j by new
{
a.Code,
a.Name,
a.AddressLine1,
a.Postcode,
a.City,
}
into g
select new
{
g.Key.Code,
g.Key.Name,
g.Key.AddressLine1,
g.Key.PowerTools,
g.Key.Internetportal,
g.Key.Huisvestingsplanning,
g.Key.Werkplanning,
g.Key.Vervoersplanning
}).ToList();
具体列表customer.cs:
struct Customer
{
public string Code { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public double PowerTools { get; set; }
public double Internetportal { get; set; }
public double Huisvestingsplanning { get; set; }
public double Werkplanning { get; set; }
public double Vervoersplanning { get; set; }
}
转换:
customers = clients.Cast<List<object>>().Select(x => new Customer(){
Code = (string)x[0],
Name = (string)x[1],
Address = (string)x[2],
PowerTools = (double)x[3],
Internetportal = (double)x[4],
Huisvestingsplanning = (double)x[5],
Werkplanning = (double)x[6],
Vervoersplanning = (double)x[7]}).ToList();
此转换引发的错误:
无法将类型为“f_uAnonymousType68[System.String,System.String,System.String,System.Double,System.Double,System.Double,System.Double]”的对象强制转换为类型为“System.Collections.Generic.List1[System.object]”
谢谢您的代码似乎试图将某个对象转换为其属性列表-这行不通,C不是JavaScript。这是可行的,但完全没有必要 您真正需要的是按照其使用方式使用匿名类型:
clients.Select(x => new Customer { Code = x.Code, Name = x.Name, ... }).ToList();
根据您使用的实际LINQ提供程序,甚至可以跳过中间人,直接选择到您自己的类型中—请参阅文档
另外,为了清楚起见,这两个列表都是通用的。区别在于第一个是匿名类型的泛型列表,而第二个是命名类型的泛型列表。不可能强制转换为列表。只需使用客户端。选择并更改奇怪的x[…]代码。选择后,您的匿名类型已经是强类型,用例是什么?您不能直接强制转换到所需的类型,因为您正在创建一个与列表类型完全不同的匿名类型。但您可以将项目转移到列表中。。。你能解释一下你为什么要这样做,也许你误解了什么。我为什么要创建这个:我在Linq中进行了这个查询,它返回一个我能理解的通用列表和客户,我需要它像列表一样更具体,这样我就可以管理这个客户列表。