传递List< {Anon:string}>到C#中的函数

时间:2011-04-13 22:12:02

标签: c# linq anonymous-types

假设:

一个linq表达式,它返回一个字段为字符串的匿名类型:

var list = new List<MyClass>();
var myStringList = (from myClass in list
                  select new {myClass.StringField}).ToList();
var processedStrings = processStrings(myStringList);

和我将List<string>传递给:

的函数
List<string> processStrings(List<string> stringsToProcess) {}

问题:

传递myStringList时出现以下编译错误:

ArgumentType type 'System.Collections.Generic.List<{StringField:string}>' is not assignable to parameter type 'System.Collections.Generic.List<string>'

所以我尝试使用.Cast<string>()来解决这个问题,它消除了编译器错误,但抛出了一个异常,它无法将匿名字符串转换为字符串。

任何想法都不必手工处理每个字符串?

3 个答案:

答案 0 :(得分:8)

尝试不返回带有一个字符串的匿名对象,而是返回字符串本身:

var list = new List<MyClass>();
var myStringList = (from myClass in list
              select myClass.StringField).ToList();
var processedStrings = processStrings(myStringList);

答案 1 :(得分:4)

为什么不

select myClass.StringField

答案 2 :(得分:3)

“new {myClass.StringField}”创建一个带字符串属性的匿名类型...

你应该尝试:

var list = new List<MyClass>();
var myStringList = (
from myClass in list                  
select myClass.StringField).ToList();
var processedStrings = processStrings(myStringList);