在 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
)。请注意,使用object
或dynamic
类型“有时”表示应该首先解决的设计问题。
但是,假设它们只是装箱的花车。你可以使用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# 中将对象数组转换为浮点数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中将嵌套对象转换为对象数组? [关闭]
在c#中将对象列表转换为数组-“x => x.Name”语法是啥意思? [复制]