可能重复:
如何将匿名类型传递给方法?
我有以下LINQ语句,其输出必须在另一种方法中处理:
var data = from lines in File.ReadAllLines(TrainingDataFile)
.Skip(ContainsHeader ? 1 : 0)
let f = lines.Split(new[] { FieldSeparator }).ToList<String>()
let target = f[TargetVariablePositionZeroBased]
select new { F=f, T=target };
Run Code Online (Sandbox Code Playgroud)
采用此数据的方法中参数的数据类型应该是什么?
您无法从方法返回匿名数据类型.您可以从查询中定义一个类并返回该类的对象,并将其传递给target方法.
public class SomeClass
{
public string F {get; set;}
public string T {get; set;}
}
var data = from lines in File.ReadAllLines(TrainingDataFile)
.Skip(ContainsHeader ? 1 : 0)
let f = lines.Split(new[] { FieldSeparator }).ToList<String>()
let target = f[TargetVariablePositionZeroBased]
select new SomeClass { F=f, T=target };
Run Code Online (Sandbox Code Playgroud)
您可以将查询结果IEnumerable<SomeClass>作为参数传递给方法.
public void MethodToCall(IEnumerable<SomeClass> someClass)
{
}
Run Code Online (Sandbox Code Playgroud)
通过传递IEnumerable<SomeClass>存储data在此示例代码中的查询结果()来调用该方法
MethodToCall(data);
Run Code Online (Sandbox Code Playgroud)
您不能很容易地传递匿名类型。您可以创建一个类,或者由于您的数据只有两个属性,因此使用Tuple:
select new Tuple<List<string>, string> (f, target);
Run Code Online (Sandbox Code Playgroud)
如果我的数据类型正确,那么参数的数据类型将是:
IEnumerable<Tuple<List<string>, string>>
Run Code Online (Sandbox Code Playgroud)
您将引用F并T使用Tuple属性Item1和Item2。