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
相关产品推荐
相关产品推荐

