You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Linq中Select创建匿名类型赋值Vector2报错CS0029的解决方法

修复CS0029类型不匹配错误

这个错误很常见,本质是类型不匹配导致的:你的Select语句生成了一个包含Vector2和Value属性的匿名类型序列,但你试图把匿名类型的实例直接赋值给Sym.Vector2类型的变量,编译器自然会报错。

修复方案一:提取匿名类型中的Vector2属性

只需要在First()之后,明确取出匿名对象里的Vector2属性即可:

Vector2 cheapestCellPosition = openCells
    .Select(x => new { Vector2 = x, Value = GetCostToTarget(x, targetPosition) + GetCell(x).Cost.GetValueOrDefault() })
    .OrderBy(x => x.Value)
    .First() // 此处获取到的是匿名类型实例
    .Vector2; // 提取其中的Vector2对象完成赋值

修复方案二:使用更简洁的MinBy方法(.NET 6+)

如果你使用的是.NET 6或更高版本,可以直接用MinBy方法一步到位,不需要先投影匿名类型:

Vector2 cheapestCellPosition = openCells
    .MinBy(x => GetCostToTarget(x, targetPosition) + GetCell(x).Cost.GetValueOrDefault());

MinBy会直接根据你传入的成本计算逻辑,找到成本最小的那个Vector2元素,代码更简洁,性能也更优(不需要完整排序,只需要遍历一次找到最小值)。

内容的提问来源于stack exchange,提问作者Question3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:28:15