如何将此类型声明为返回值?

时间:2014-04-30 14:29:59

标签: c# linq

我在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
}

2 个答案:

答案 0 :(得分:3)

这是一种匿名类型。它们具体设计为仅在创建它们的范围内使用。如果你想将它传递给另一个将作用于该类型的方法,那么你应该创建一个新的命名类型,而不是使用匿名类型。

虽然可能可以做到这一点,但是除了简单地创建一个新的命名类型之外,所有替代方案都会为您做更多工作,而且更有问题。

答案 1 :(得分:3)

匿名类型的全部内容是他们匿名,又名"没有名字"。

你可以通过返回dynamic并使用弱类型来解决这个问题,但这很丑陋。而是创建一个包含这些字段并使用

的类型
.Select(x => new MyType() { }

并返回MyType