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

kum*_*mar 1 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
Run Code Online (Sandbox Code Playgroud)

Hen*_*nry 9

var不是一种类型.这是一个关键字,意思是"为我填写类型".

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

而不是Where,使用FirstOrDefault.

var itemsMax = lt.FirstOrDefault(xa => xa.Similarity == wwe);
Run Code Online (Sandbox Code Playgroud)

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

请注意,如果您只需要具有该值的单个项目,则上述方法有效.

如果可能有多个具有最大值的项目 - 并且您想要多个项目 - 请WhereOfType或组合Cast.

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