在 C# 中将对象数组转换为浮点数组 [关闭]

Posted

技术标签:

【中文标题】在 C# 中将对象数组转换为浮点数组 [关闭]【英文标题】:Convert an Object array to a Float array in C# [closed] 【发布时间】:2021-03-23 11:10:08 【问题描述】:

我有一个包含 256 个元素的对象数组,需要将其转换为浮点数组。

如何在 C# 中将 Object 数组转换为 float 数组而性能损失最小?

谢谢

【问题讨论】:

我投票决定将此问题作为离题结束,因为有关代码优化的问题(“...以最小的性能损失”)是题外话。请参阅 Can I post questions about optimizing code on Stack Overflow?Is it okay to ask for code optimization help? 了解更多信息。 “如何在 C# 中将 Object 数组转换为 float 数组”——这取决于这些对象实际上是什么,而您在帖子中没有说明。 “以最小的性能损失?” - 可以说是题外话,通常是“缺乏焦点”,并且充其量需要一个问题来说明你已经尝试过什么,你具体需要什么帮助,并明确说明您如何确定绩效不足,以及预期/需要什么绩效目标。 【参考方案1】:

如果您担心性能,最好不要一开始就装箱值类型(即object)。请注意,使用objectdynamic 类型“有时”表示应该首先解决的设计问题。

但是,假设它们只是装箱的花车。你可以使用Cast:

将 IEnumerable 的元素转换为指定类型。

var floatArray = objectArray.Cast<float>().ToArray();

如果对象不仅仅是装箱的浮点数,还实现了IConvertible 接口,您可能需要采取更激烈的措施并使用转换方法之一,例如ChangeType 或@987654329 @。

返回一个指定类型且其值相等的对象 到指定的对象。

...

ChangeType 是一种通用的转换方法,可将 由转换类型的值指定的对象。 value参数可以 可以是任意类型的对象,conversionType 也可以是 Type 对象 表示任何基本类型或自定义类型。对于转换为 成功,value 必须实现 IConvertible 接口,因为 方法只是包装对适当 IConvertible 方法的调用。这 方法要求将 value 转换为 conversionType 支持。

var objects = new List<object>() "3", 2m ,3L,"5.5";
var floatArray = objects.Select(x => (float)Convert.ChangeType(x, typeof(float))).ToArray();

注意:这是相当低效的。

【讨论】:

【参考方案2】:

如果你必须这样做,这是一种方法。 ObjectArray 是对象的数组。此代码不检查对象是否可以转换为单个对象。

var result = objectArray.Select(o=> Convert.ToSingle(o)).ToArray();

Microsoft documentation for ToSingle

【讨论】:

以上是关于在 C# 中将对象数组转换为浮点数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将对象数组向上转换为另一种类型的对象数组?

在 C# 中将对象数组隐式转换为 int 数组

如何在javascript中将嵌套对象转换为对象数组? [关闭]

在c#中将对象列表转换为数组-“x => x.Name”语法是啥意思? [复制]

C# Unity 无法将浮点类型隐式转换为 int [关闭]

如何在 C# 中将列表或数组转换为子类型?