我在CSV文件上运行Linq查询,如下所示:
var csvData = File.ReadAllLines(filePath)
.Skip(1)
.Select(x => x.Split(','))
.Select(x => new
{
IDOrderAlpha = x[0].Replace("\"", ""),
IDOrder = x[1].Replace("\"", ""),
AddressCompany = x[2].Replace("\"", ""),
Address1 = x[3].Replace("\"", ""),
Address2 = x[4].Replace("\"", ""),
AddressCity = x[5].Replace("\"", ""),
AddressState = x[6].Replace("\"", ""),
AddressZip = x[7].Replace("\"", ""),
AddressCountry = x[8].Replace("\"", ""),
ShipMethod = x[9].Replace("\"", ""),
ContactEmail = x[10].Replace("\"", ""),
ContactName = x[11].Replace("\"", ""),
ServiceRep = x[12].Replace("\"", ""),
CustomerPuchaseOrder = x[13].Replace("\"", ""),
});
现在我想将它传递给另一个函数,但是无法弄清楚返回值的对象类型是什么。我应该指定什么(即在下面的示例中,someType
是什么)?:
static someType clearNoShip(someType csvData)
{
// do work on csvData and return it
}
答案 0 :(得分:3)
这是一种匿名类型。它们具体设计为仅在创建它们的范围内使用。如果你想将它传递给另一个将作用于该类型的方法,那么你应该创建一个新的命名类型,而不是使用匿名类型。
虽然可能可以做到这一点,但是除了简单地创建一个新的命名类型之外,所有替代方案都会为您做更多工作,而且更有问题。
答案 1 :(得分:3)
匿名类型的全部内容是他们匿名,又名"没有名字"。
你可以通过返回dynamic
并使用弱类型来解决这个问题,但这很丑陋。而是创建一个包含这些字段并使用
.Select(x => new MyType() { }
并返回MyType