C# 强制转换整个数组?

标签 c# arrays casting

我看到了这个 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/

相关文章:

c# - TinyMCE 编辑器 : A potentially dangerous Request. 从客户端检测到表单值

c# - 当文本框的绑定(bind)设置为 OneWayToSource 时,WPF TargetNullValue 返回值

c# - 在 C# 中反序列化 XML 时如何获取对父对象的引用?

javascript - 对照另一个数组检查数组项

c - ANSI-C pow 函数和类型转换

c# - 如何使用反射访问私有(private)基类字段

c# - 在 WPF 中使用 EdgeMode.Aliased 选项时会出现额外的线条

java - 如何优化我的代码以将给定索引范围的数组元素与相关元素交换?

arrays - 在Scala中创建大量数组

java - Actor 列表到 Collection