【问题标题】:Convert an Object array to a Float array in C# [closed]在 C# 中将对象数组转换为浮点数组 [关闭]
【发布时间】: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 数组”——这取决于这些对象实际上是什么,而您在帖子中没有说明。 “以最小的性能损失?” - 可以说是题外话,通常是“缺乏焦点”,并且充其量需要一个问题来说明你已经尝试过什么,你具体需要什么帮助,并明确说明您如何确定绩效不足,以及预期/需要什么绩效目标。

标签: c# arrays converters


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多