如何从var到对象的类型转换

时间:2012-06-29 11:01:24

标签: c# linq

我只是linq从对象列表中找到最大对象现在我想要从var更改为对象。怎么做的。

List < MyObject> lt = matchings.ToList();
var wwe = lt.Max(ya => ya.Similarity);
var itemsMax = lt.Where(xa => xa.Similarity == wwe);
MyObject sm =(TemplateMatch) itemsMax;//it gives error here

4 个答案:

答案 0 :(得分:9)

var不是一种类型。这是一个关键词,意思是“为我填写类型”。

Where返回一个集合。您正在尝试将集合转换为单个项目。

而不是Where,请使用FirstOrDefault

var itemsMax = lt.FirstOrDefault(xa => xa.Similarity == wwe);

现在你得到一个项目,如果需要可以投射它。

如果您只想要一个具有该值的项目,请注意上述情况。

如果可能有多个具有最大值的项目 - 并且您希望返回多个项目 - 请将WhereOfTypeCast合并。

var itemsMax = lt.Where(xa => xa.Similarity == wwe); 
var allItemsCasted = itemsMax.Cast<NewType>(); // this throws
var typeCompatibleItems = itemsMax.OfType<NewType>(); // this filters

答案 1 :(得分:2)

问题似乎是Where返回一个对象集合,但您只需要一个对象。试试itemsMax.Single()

答案 2 :(得分:1)

不是枚举matchings两次(一次计算“最大相似度”,而是第二次查找具有最大相似度的项目),您可以使用{{1}一次完成此操作}:

IEnumerable<T>.Aggregate

答案 3 :(得分:0)

您的lt.Where会返回一个可枚举的内容。所以,这就是为什么它不会转换为单个对象。最后添加一个.Single()方法,它应该强制转换。