我看到了这个 Array.ConvertAll
方法,但它需要一个 Converter
作为参数。当我已经在我的类中定义了一个隐式转换器时,我不明白为什么我需要一个转换器:
public static implicit operator Vec2(PointF p)
{
return new Vec2(p.X, p.Y);
}
我正在尝试将 PointF
数组转换为 Vec2
数组。有没有好的方法来做到这一点?或者我应该接受它并编写(另一个)转换器或在元素上循环?
最佳答案
建议的 LINQ 解决方案使用 Cast
/'Select' 很好,但是因为你知道你在这里使用数组,所以使用 ConvertAll
效率更高,也同样简单。
var newArray = Array.ConvertAll(array, item => (NewType)item);
使用 ConvertAll
意味着
a) 数组只迭代一次,
b) 该操作针对数组进行了更优化(不使用 IEnumerator<T>
)。
不要让 Converter<TInput, TOutput>
类型让您感到困惑 - 它只是一个简单的委托(delegate),因此您可以为其传递一个 lambda 表达式,如上所示。
关于C# 强制转换整个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068120/